|
|
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
В классе есть процедуры, некоторые из них выполняются по таймеру. Всё вместе подгружает основной поток, что делать? Для каждой процедуры создавать поток? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 22:48 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554Для каждой процедуры создавать поток? Или для каждой процедуры поток. Или один поток на все процедуры. Телепаты в отпуске, никто не знает что у тебя за процедуры и зачем им таймер. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 23:14 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554, Выхода два: 1. Оптимизировать эти процедуры, чтобы они не грузили поток, в котором выполняются; 2. Запускать их в не основном потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 01:07 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Я недавно в программировании, dll и bpl(как я понял улучшенный аналог длл для работы с классами) выполняются в отдельном потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 08:34 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554dll и bpl(как я понял улучшенный аналог длл для работы с классами) выполняются в отдельном потоке? Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 08:46 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
попробуй почитать туториалы по OmniThreadLibrary библиотека расчитанная на создание многопоточных программ в терминах "потоков данных", а не "потоков управления". может быть это то, что тебе нужно. заводишь несколько конвейеров, для разных типов данных, вешаешь на них свои сложные процедуры, и в основном потоке просто забрасываешь им во входные буфера кадры с данными и иногда снимаешь с выходных готовые. но вообще, многопоточность - требует понимания и строгости. В частности твои "сложные процедуры" ,если ты их выносишь в отдельный поток, должны выполняться внутри себя и не лезть в основную программу. Должны быть черными ящиками, получил ВСЕ нужные данные, обработал, вернул результат. Никаких там окошек с ошибками, запросов у пользователя настроек и прочего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 12:57 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Можешь почитать беседы с дрyгим новичком. https://stackoverflow.com/questions/39096452 https://stackoverflow.com/questions/39153277 https://stackoverflow.com/questions/39580539 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:00 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
AriochНикаких там окошек с ошибками, запросов у пользователя настроек и прочего. можно и с ними, но в контексте Ariochмногопоточность - требует понимания и строгости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:01 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
а вообще в яндексе до хрена туториалов. http://www.delphi-manual.ru/threads.php http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1370 http://www.delphiplus.org/articles/delphi/multi-threads_programs.html https://habrahabr.ru/post/152025/ https://habrahabr.ru/post/144681/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:02 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
В яндексе вбейте в поиск "asynccalls taskex". Можно прямо по коду часть работы убрать в отдельный поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:02 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Докможно и с ними, но в контексте вот именно. поэтому первое правило - НЕЛЬЗЯ вот когда чайник немножко встанет не крыло, можно переходить к исключениям из обзщего правила. а потом он может быть до гуру дорастёт и весь VCL на фиберы перепишет. но - потом. а пока - нельзя. сначала - правила, потом - исключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:03 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Кстати, да. AsyncCalls как очень простой OTL тоже всеьма неплох. Был когда-то. До 2010 года. А сейчас есть стандартные TThread.Queue и TThread.CreateAnonymousThread - в общем они перекрывают AsyncCalls во многом, если не во всем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:09 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Arioch, авторно вообще, многопоточность - требует понимания и строгости. Глобально в многпоточности одна сложность - синхронизация между разными потоками. Как дополнительными так и основным. Почти любой код можно запихнуть в доп. поток или потоки, часто с минимальным переписыванием. Добавил либу для распараллеливания, она не такая тяжеловесная, как омни. Можно посмотреть в строну TJvThread из жедаев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:21 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Всем спасибо большое за ответы! Сейчас буду читать, изучать. Но прежде хотелось бы задать ещё один вопрос (возможно тупой), как посмотреть кол-во запущенный потоков в программе и желательно видеть их загрузку цп, может есть какая то программа? По поводоу "кол-во запущенный потоков в программе", видел в инете можно самому код написать и узнать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:37 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:41 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
makhaonне такая тяжеловесная, как омни Омни монстровата, не отнять. Но если у тебя много данных, то вообще переключения мозга в режим (думаем о данных и их обработке) из режима (думаем о процедурах и циклах) сильно упрощает жизнь. А если у тебя мало данных - то зачем тебе многопоточность? и новые классовые функции TThread на 99% достаточны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:45 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Только не удивляйся если у своего процесса увидишь больше потоков, чем ожидаешь. Виндовс - гадкий вирус, она внедряет в чужие процессы свои собственные потоки с целями неясными. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:45 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
makhaonДобавил либу для распараллеливания, она не такая тяжеловесная, как омни. Можно посмотреть в строну TJvThread из жедаев. вот еще однофайловый готовый менеджер потоков :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:50 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Прелесть той библиотеки в том, что она позволяет распараллелить куски кода по ходу выполнения. Проще всего - циклы (другие куски нужно в циклы превращать). Есть какой-то долгий цикл, поменяли одну строку кода, собственно, цикл, он уже обрабатывается параллельно (если данные, конечно, лежат как нужно). На самом деле - очень удобно. Я у себя счетные задачи и загрузку файлов ускоряю. Разница по скорости огромная (i7). Я, честно, сам не ожидал, думал в память 'упрётся', но нет, 4 ядра + ht дают примерно 6-7 кратное ускорение. От задачи, конечно, зависит. Если нужно именно параллельное выполнение с основным потоком, то эта либа не подходит, увы. Либо обычный TThread, либо TJvThread, либо wadman'овская компонента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:18 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:41 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Arioch, а потом он может быть до гуру дорастёт и весь VCL на фиберы перепишет. Есть руководства по фиберам (Fiber)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:58 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
makhaonЕсли нужно именно параллельное выполнение с основным потоком, то эта либа не подходит, увы. + win only ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:58 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554, Начни с изучения предметной области, а НЕ с библиотек, и даже не со стандартного TThread. Что такое поток (ЧЕГО поток) и так далее. Пойми, почему нельзя бездумно использовать одни ресурсы в разных потоках. Поймешь - узнай, что нужно делать для того, чтобы использовать одни ресурсы в разных потоках (если уж очень надо такое использование). Как и за счет чего потоки могут ждать друг друга (если это требуется). Как ведет себя операционка при старте/завершении потока, что вообще происходит при этом. Внимательно изучи документацию разработчика операционки по функции старта потока. И еще много всякой теории. Потом можно начинать пробовать (стандартный TThread или библиотеку - не важно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 15:47 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
ziv-2014, нет, был только чей-то проект у кого-то в блоге это ведь надо переписывать ВЕСЬ VCL потом ВСЕ сторонние компоненты-библиотеки для VCL потом ВСЕ мало-мальски сложные программы тут "за три урока для чайника" не напишешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 16:08 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Arioch, это ведь надо переписывать ВЕСЬ VCL потом ВСЕ сторонние компоненты-библиотеки для VCL потом ВСЕ мало-мальски сложные программы Да что-нибудь базовое основы :) В indy10 нашел реализацию fibers. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:12 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
базовое будет без VCL - это либо обсуждение на чистов Windows API, либо вообще теоретическое в отрыве от любых операционок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:14 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Нажимаю несколько раз Запустить/Остановить выполнение потока, иногда всё норм, иногда WinClass = WinTitle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 18:08 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Изолировал, вырезав код в отдельную программу, тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 18:50 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554Изолировал, вырезав код в отдельную программу, тоже самое. http://www.sql.ru/forum/actualfile.aspx?id=21161642] Приложенный файл (1.rar - 59Kb) Error554 Код: pascal 1. 2. 3. 4. 5. Смотрю, ты не удосужился почитать об использовании общих ресурсов разными потоками... Error554Нажимаю несколько раз Запустить/Остановить А надо не нажимать, а запускать/останавливать. Забыл Button1Click и Button2Click реализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 19:58 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
YuRockА надо не нажимать, а запускать/останавливать. Забыл Button1Click и Button2Click реализовать? А, не увидел проекта прикрепленного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 20:01 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
YuRockСмотрю, ты не удосужился почитать об использовании общих ресурсов разными потоками... Разные потоки, это созданный мною поток и главный поток? И к общим ресурсам относятся процедуры, функции, переменные основного потока? Так основной поток не использует процедуры GetWindowTitle и GetWindowClass, а вот Application.Handle может где то использоваться. Я знаю, что при создании нескольких, своих, потоков и при обращении из них к VCL объектам нужно использовать специальный метод - синхронизациz. Но не думал (и не видел в самых первый статьях из поиска по теме потоки), что для обращения к общим ресурсам ещё что то нужно. Ок, пошёл искать, читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 20:20 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554Разные потоки, это созданный мною поток и главный поток?Да. Error554И к общим ресурсам относятся процедуры, функцииНет. Я уже писал, что для начала (обучения) надо понять хотя бы, поток ЧЕГО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 23:53 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554Я знаю, что при создании нескольких, своих, потоков и при обращении из них к VCL объектам нужно использовать специальный метод - синхронизациz.Хрень ты "знаешь", забудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 23:55 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554Я знаю, что при создании нескольких, своих, потоков и при обращении из них к VCL объектам нужно использовать специальный метод - синхронизациz.Так какого хрена не используешь? По крайней мере поменяй Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. А вообще уточни конкретнее что у тебя должно делаться, а то пример слишком искусственный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 17:45 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
white_nigger, да там только из этого потока Memo используется, больше нигде (и в основном тоже). Поэтому не стал применять синхронизацию. Сейчас всё работает. У функции, которая получает имя класса окна, заменил SizeOf на Length. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 18:20 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554больше нигде (и в основном тоже)ошибаешься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 18:24 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554white_nigger, да там только из этого потока Memo используется, больше нигде (и в основном тоже). Поэтому не стал применять синхронизацию. Сейчас всё работает. У функции, которая получает имя класса окна, заменил SizeOf на Length.Именно тот код который в архиве, с предложенным мной TThread.Queue потокобезопасен. Другое дело что у тебя в реальном приложении может по-другому реализовано. В-общем, надеюсь, ты мысль уловил. Ничего сверхъестественного в синхронизации нет, если включить голову ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2018, 00:26 |
|
||
|
Работа класса грузит основной поток
|
|||
|---|---|---|---|
|
#18+
Error554да там только из этого потока Memo используется ты все таки пройдись по моим ссылкам, там правда по английски, но всё же обновлять Memo должен 1) основной поток 2) не чаще, чем 2-3 раза в секунду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 16:43 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041269]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 427ms |

| 0 / 0 |
