Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа класса грузит основной поток / 25 сообщений из 38, страница 1 из 2
01.02.2018, 22:48
    #39595274
Error554
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
В классе есть процедуры, некоторые из них выполняются по таймеру. Всё вместе подгружает основной поток, что делать? Для каждой процедуры создавать поток?
...
Рейтинг: 0 / 0
01.02.2018, 23:14
    #39595281
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Error554Для каждой процедуры создавать поток?

Или для каждой процедуры поток. Или один поток на все процедуры. Телепаты в отпуске, никто
не знает что у тебя за процедуры и зачем им таймер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.02.2018, 01:07
    #39595295
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Error554,

Выхода два:
1. Оптимизировать эти процедуры, чтобы они не грузили поток, в котором выполняются;
2. Запускать их в не основном потоке.
...
Рейтинг: 0 / 0
02.02.2018, 08:34
    #39595352
Error554
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Я недавно в программировании, dll и bpl(как я понял улучшенный аналог длл для работы с классами) выполняются в отдельном потоке?
...
Рейтинг: 0 / 0
02.02.2018, 08:46
    #39595362
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Error554dll и bpl(как я понял улучшенный аналог длл для работы с классами) выполняются в отдельном потоке?
Нет.
...
Рейтинг: 0 / 0
02.02.2018, 12:57
    #39595544
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
попробуй почитать туториалы по OmniThreadLibrary

библиотека расчитанная на создание многопоточных программ в терминах "потоков данных", а не "потоков управления".

может быть это то, что тебе нужно.

заводишь несколько конвейеров, для разных типов данных, вешаешь на них свои сложные процедуры, и в основном потоке просто забрасываешь им во входные буфера кадры с данными и иногда снимаешь с выходных готовые.

но вообще, многопоточность - требует понимания и строгости. В частности твои "сложные процедуры" ,если ты их выносишь в отдельный поток, должны выполняться внутри себя и не лезть в основную программу. Должны быть черными ящиками, получил ВСЕ нужные данные, обработал, вернул результат.

Никаких там окошек с ошибками, запросов у пользователя настроек и прочего.
...
Рейтинг: 0 / 0
02.02.2018, 13:00
    #39595546
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
...
Рейтинг: 0 / 0
02.02.2018, 13:01
    #39595549
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
AriochНикаких там окошек с ошибками, запросов у пользователя настроек и прочего.
можно и с ними, но в контексте

Ariochмногопоточность - требует понимания и строгости
...
Рейтинг: 0 / 0
02.02.2018, 13:02
    #39595550
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
...
Рейтинг: 0 / 0
02.02.2018, 13:02
    #39595551
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
В яндексе вбейте в поиск "asynccalls taskex". Можно прямо по коду часть работы убрать в отдельный поток.
...
Рейтинг: 0 / 0
02.02.2018, 13:03
    #39595552
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Докможно и с ними, но в контексте

вот именно.

поэтому первое правило - НЕЛЬЗЯ

вот когда чайник немножко встанет не крыло, можно переходить к исключениям из обзщего правила.

а потом он может быть до гуру дорастёт и весь VCL на фиберы перепишет.

но - потом.

а пока - нельзя.

сначала - правила, потом - исключения.
...
Рейтинг: 0 / 0
02.02.2018, 13:09
    #39595556
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Кстати, да. AsyncCalls как очень простой OTL тоже всеьма неплох.
Был когда-то.
До 2010 года.

А сейчас есть стандартные TThread.Queue и TThread.CreateAnonymousThread - в общем они перекрывают AsyncCalls во многом, если не во всем
...
Рейтинг: 0 / 0
02.02.2018, 13:21
    #39595569
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Arioch,

авторно вообще, многопоточность - требует понимания и строгости.

Глобально в многпоточности одна сложность - синхронизация между разными потоками. Как дополнительными так и основным. Почти любой код можно запихнуть в доп. поток или потоки, часто с минимальным переписыванием.
Добавил либу для распараллеливания, она не такая тяжеловесная, как омни. Можно посмотреть в строну TJvThread из жедаев.
...
Рейтинг: 0 / 0
02.02.2018, 13:37
    #39595586
Error554
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Всем спасибо большое за ответы! Сейчас буду читать, изучать. Но прежде хотелось бы задать ещё один вопрос (возможно тупой), как посмотреть кол-во запущенный потоков в программе и желательно видеть их загрузку цп, может есть какая то программа?

По поводоу "кол-во запущенный потоков в программе", видел в инете можно самому код написать и узнать.
...
Рейтинг: 0 / 0
02.02.2018, 13:41
    #39595592
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
1) самa Delphi во время выполнения программы список показывает - иди в меню View - debug windows - threads

2) Windows 7 (или 8, не помню) и до неё - SysInternals.com Process Explorer

3) Windows 8 (или 10, не помню) - Майкрософт купила SysInternals и функции P.E. появились в обычном диспетчере задач, Ctrl+Shift+Esc
...
Рейтинг: 0 / 0
02.02.2018, 13:45
    #39595596
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
makhaonне такая тяжеловесная, как омни

Омни монстровата, не отнять.

Но если у тебя много данных, то вообще переключения мозга в режим (думаем о данных и их обработке) из режима (думаем о процедурах и циклах) сильно упрощает жизнь.

А если у тебя мало данных - то зачем тебе многопоточность? и новые классовые функции TThread на 99% достаточны.
...
Рейтинг: 0 / 0
02.02.2018, 13:45
    #39595598
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Только не удивляйся если у своего процесса увидишь больше потоков, чем ожидаешь. Виндовс -
гадкий вирус, она внедряет в чужие процессы свои собственные потоки с целями неясными.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.02.2018, 13:50
    #39595601
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
makhaonДобавил либу для распараллеливания, она не такая тяжеловесная, как омни. Можно посмотреть в строну TJvThread из жедаев.
вот еще однофайловый готовый менеджер потоков :)
...
Рейтинг: 0 / 0
02.02.2018, 14:18
    #39595622
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Прелесть той библиотеки в том, что она позволяет распараллелить куски кода по ходу выполнения. Проще всего - циклы (другие куски нужно в циклы превращать). Есть какой-то долгий цикл, поменяли одну строку кода, собственно, цикл, он уже обрабатывается параллельно (если данные, конечно, лежат как нужно). На самом деле - очень удобно. Я у себя счетные задачи и загрузку файлов ускоряю. Разница по скорости огромная (i7). Я, честно, сам не ожидал, думал в память 'упрётся', но нет, 4 ядра + ht дают примерно 6-7 кратное ускорение. От задачи, конечно, зависит.
Если нужно именно параллельное выполнение с основным потоком, то эта либа не подходит, увы. Либо обычный TThread, либо TJvThread, либо wadman'овская компонента.
...
Рейтинг: 0 / 0
02.02.2018, 14:41
    #39595644
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
makhaonпозволяет распараллелить куски кода по ходу выполнения. Проще всего - циклы (другие куски нужно в циклы превращать)

Т.е. - параллельный цикл.

http://otl.17slon.com/book/chap04.html#highlevel-foreach

http://www.thedelphigeek.com/2010/06/omnithreadlibrary-20-sneak-preview-1.html

Также
http://otl.17slon.com/book/chap04.html#highlevel-join
...
Рейтинг: 0 / 0
02.02.2018, 14:58
    #39595658
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Arioch,

а потом он может быть до гуру дорастёт и весь VCL на фиберы перепишет.

Есть руководства по фиберам (Fiber)?
...
Рейтинг: 0 / 0
02.02.2018, 14:58
    #39595659
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
makhaonЕсли нужно именно параллельное выполнение с основным потоком, то эта либа не подходит, увы.
+ win only
...
Рейтинг: 0 / 0
02.02.2018, 15:47
    #39595708
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Error554,

Начни с изучения предметной области, а НЕ с библиотек, и даже не со стандартного TThread. Что такое поток (ЧЕГО поток) и так далее.
Пойми, почему нельзя бездумно использовать одни ресурсы в разных потоках. Поймешь - узнай, что нужно делать для того, чтобы использовать одни ресурсы в разных потоках (если уж очень надо такое использование).
Как и за счет чего потоки могут ждать друг друга (если это требуется).
Как ведет себя операционка при старте/завершении потока, что вообще происходит при этом.
Внимательно изучи документацию разработчика операционки по функции старта потока.
И еще много всякой теории.
Потом можно начинать пробовать (стандартный TThread или библиотеку - не важно).
...
Рейтинг: 0 / 0
02.02.2018, 16:08
    #39595733
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
ziv-2014,

нет, был только чей-то проект у кого-то в блоге

это ведь надо переписывать ВЕСЬ VCL
потом ВСЕ сторонние компоненты-библиотеки для VCL
потом ВСЕ мало-мальски сложные программы

тут "за три урока для чайника" не напишешь
...
Рейтинг: 0 / 0
02.02.2018, 17:12
    #39595777
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа класса грузит основной поток
Arioch,
это ведь надо переписывать ВЕСЬ VCL
потом ВСЕ сторонние компоненты-библиотеки для VCL
потом ВСЕ мало-мальски сложные программы

Да что-нибудь базовое основы :)
В indy10 нашел реализацию fibers.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа класса грузит основной поток / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]