|
|
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Никак не могу додумать, как такое сделать. Прошу помощи! Такая задача: Есть thread #1 , в начале Execute которого создаю всякие вспомогательные COM-объекты, в конце их уничтожаю. Thread #1 обычно должен простаивать, ничего не делая. Но время от времени какой-нибудь thread #2/#3/#4/... должен остановиться, бросить этому thread #1 данные и ждать, пока тот их не обработает. После чего вызвавший thread #2/#3/#4/... продолжит свою работу, а thread #1 будет ждать нового задания заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 00:51 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 00:51 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Есть много способов: Interlocked функции, Event-ы, мьютексы, etc... Но вот в чем вопрос на зачем тебе этот поток, если во время его работы остальные потоки уснут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 03:57 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Thread #1 нужен потому, что: 1) это не должен быть главный thread 2) из-за COM объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 08:27 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
С моей библиотекой - легко. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 08:47 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Thread, обычная же очередь, добавить просто калбак на завершение таска I/O Completion Ports Thread, обходишь косяки в RPC? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 08:55 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
А что потоки 2_3_4 делают, кроме отправки задания и ожидания окончания? Нужны ли они? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 08:57 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Делают всякое, но, пожалуйста, давайте не будем отвлекать топик на это. Вопрос (просьба) помочь с кодом, как сделать эту задержку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 09:16 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Thread, обычная же очередь, добавить просто калбак на завершение таска I/O Completion Ports Thread, обходишь косяки в RPC? Спасибо, посмотрю. Обхожу косяки ограниченности ресурсов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 09:20 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Thread, сделать поток с очередью сообщений и посылать туда сообщения из других потоков через SendMessage ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 10:24 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
ZeliusThread, сделать поток с очередью сообщений и посылать туда сообщения из других потоков через SendMessageога ..., и получить в полной красе то с чем он борется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:17 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)ZeliusThread, сделать поток с очередью сообщений и посылать туда сообщения из других потоков через SendMessageога ..., и получить в полной красе то с чем он борется еще раз перечитал - все соответствует поставленной задаче ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:19 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Zeliusеще раз перечитал - все соответствует поставленной задаче Да 100% очередь нужна. Например, виндовая c SendMessage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:34 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Zeliuskealon(Ruslan)пропущено... ога ..., и получить в полной красе то с чем он борется еще раз перечитал - все соответствует поставленной задачеугу, особенно замечательно когда у тебя посыпятся "Canvas don't allow drawing" и прочие прелести вроде дедлоков на ровном месте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:46 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)особенно замечательно когда у тебя посыпятся "Canvas don't allow drawing" и прочие прелести вроде дедлоков на ровном местеС каких делов они посыпятся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:49 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockС каких делов они посыпятся? MSDNThe sending thread is blocked until the receiving thread processes the message. However, the sending thread will process incoming nonqueued messages while waiting for its message to be processed. To prevent this, use SendMessageTimeout with SMTO_BLOCK set. For more information on nonqueued messages, see Nonqueued Messages. Если будешь использовать не из главного потока проблем особых не будет, но всё меняется... конкретно с "Canvas don't allow drawing" проблема в связке Код: pascal 1. 2. 3. 4. 5. 6. которая везде раскидана по VCL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 12:10 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Thread, ZeroMQ + REQ-REP по протоколу inproc. Кодировать три минуты, очередь искаропки, все бесплатно. Отправляется сообщение, сообщение поступает в очередь треда - воркера, ждём ответа. Воркер, завершив предыдущее задание, выгребают из очерди следующее, работает, отправляет ответ заказчику. Заказчик, отправив задание, спит до получения ответа воркера. Никаких семафоров, мьютексов и прочей дичи, только сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 12:16 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Ну, значит тогда можно использовать SendMessageTimeout with SMTO_BLOCK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 12:22 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRock, можно и так, но IOС Port всё равно проще и прозрачнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 12:35 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), ничё се проще :) ну кому как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 12:38 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockkealon(Ruslan), ничё се проще :) ну кому как. чуть переделать Код: 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. 37. 38. 39. 40. 41. 42. и сравни с SendMessage : класс зарегать, протянуть оконную процу, ещё схлопать с организацией завершением цикла ну его нафиг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 13:30 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
ThreadВопрос (просьба) помочь с кодом, как сделать эту задержку. Ну, как-то то именно этому посвящена целая книга, если конечно делать все thread-like. А кроме книги есть еще куча материалов. А по вопросу... Чем не устраивает: Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 14:16 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilarэтому посвящена целая книга PDF-версия http://web.archive.org/web/20120522180418/http://podgoretsky.com/ftp/Docs/Delphi/DX/Martin Harvey - Threads.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 14:37 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilarА по вопросу... Чем не устраивает: Код: pascal 1. 2. 3. А что случится, если в этот момент я закрою окно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 14:37 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1355 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 14:39 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
КвейдА что случится, если в этот момент я закрою окно? Это зависит от наличия программиста на проекте. Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 14:41 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), не надо ничего регистрировать, уже все готовое есть - AllocateHWnd и цикл стандартный выборки из очереди сообщений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 14:44 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Zeliuskealon(Ruslan), не надо ничего регистрировать, уже все готовое есть - AllocateHWnd и цикл стандартный выборки из очереди сообщенийт.е. то что она не threadsafe вас никак не смущает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 14:49 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), есть такая фигня, да, но не смущает, я ею часто пользуюсь, небезопасность легко обходится вызовом в главном потоке перед созданием доп потока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 15:14 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Zeliusнебезопасность легко обходится вызовом в главном потоке перед созданием доп потока Как же оно тогда, окошко бедное, будет работать через цикл сообщения доп. потока? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 15:16 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Идиотизм использовать несколько потоков,что бы в этих потоках ждать выполнения запущенного потока. Тогда и одного потока с головой хватит, написав код линейно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 15:40 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockZeliusнебезопасность легко обходится вызовом в главном потоке перед созданием доп потока Как же оно тогда, окошко бедное, будет работать через цикл сообщения доп. потока? нее, вызвать в главном, а потом в дополнительном спокойно вызывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 15:42 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Zeliusнее, вызвать в главном, а потом в дополнительном спокойно вызыватьMakeObjectInstance тоже не threadsafe, шикарно будет когда на массовом проекте встретите ещё такого же оптимизатора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 15:53 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
МиксионисюниИдиотизм использовать несколько потоков,что бы в этих потоках ждать выполнения запущенного потока. Тогда и одного потока с головой хватит, написав код линейноабсолютно согласен, осталось только микрософт убедить подправить пару мелочей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 15:54 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 15:56 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, с PostThreadMessage те же прелести что и с SendMessage 21402607 , и обходной функции нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 16:24 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за обсуждение Я здесь, никуда не делся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 17:24 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
МиксионисюниИдиотизм использовать несколько потоков,что бы в этих потоках ждать выполнения запущенного потока. Тогда и одного потока с головой хватит, написав код линейноНе идиотизм, если нужна очередь - строго последовательное исполнение заданий, полученных из разных потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 22:25 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
ZeliusYuRockпропущено... Как же оно тогда, окошко бедное, будет работать через цикл сообщения доп. потока? нее, вызвать в главном, а потом в дополнительном спокойно вызыватьЧто вызывать? Если ты сделал CreateWindow в главном потоке, то это окно будет "принажлежать" главному потоку, и сообщения ему будут в нем приходить только. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 22:37 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockМиксионисюниИдиотизм использовать несколько потоков,что бы в этих потоках ждать выполнения запущенного потока. Тогда и одного потока с головой хватит, написав код линейноНе идиотизм, если нужна очередь - строго последовательное исполнение заданий, полученных из разных потоков. Тебе о другом говорят: отправляешь задание и ждешь результатов - чем лучше ожидание результата по сравнению с (например) просто вызовом нужной функции прямо в контексте данного треда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 22:57 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRock, Пояснение, у нас есть уже поток, вместо того что бы вызывать новые потоки, мы можем вызывать функции Я уже чувствую как твои идеалы рушатся на корню. чччД слишком заумно высказал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 23:15 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
чччДYuRockпропущено... Не идиотизм, если нужна очередь - строго последовательное исполнение заданий, полученных из разных потоков. Тебе о другом говорят: отправляешь задание и ждешь результатов - чем лучше ожидание результата по сравнению с (например) просто вызовом нужной функции прямо в контексте данного треда?Ничем только в случае, если это задание выполняется изолированно. А если это команда на устройство на открытом компорте? Нужна и очередь, и ожидание исполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 23:51 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
МиксионисюниЯ уже чувствую как твои идеалы рушатся на корню. чччД слишком заумно высказалчччД правильно сказал, только ты не понял, что он сказал об общем (и частном в то же время) случае. Да, бывает, такое бессмысленно, и конечно можно просто вызвать функцию. А бывает - что жругого выхода нет и нвдо ждать окончания задания именно в другом потоке (который обрабатывает очередь). Думаю, именно эта задача у ТС - активыксы какие-то создаются, видимо, для работы с устройствами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 23:56 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockМиксионисюниИдиотизм использовать несколько потоков,что бы в этих потоках ждать выполнения запущенного потока. Тогда и одного потока с головой хватит, написав код линейноНе идиотизм, если нужна очередь - строго последовательное исполнение заданий, полученных из разных потоков.для этого достаточно критической секции YuRockZeliusпропущено... нее, вызвать в главном, а потом в дополнительном спокойно вызыватьЧто вызывать? Если ты сделал CreateWindow в главном потоке, то это окно будет "принажлежать" главному потоку, и сообщения ему будут в нем приходить только. я так понял, что он имел ввиду что там ленивая инициализация и достаточно один раз предварительно запустить, но это не так, дело портит MakeObjectInstance ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 00:09 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)для этого достаточно критической секцииНу правильно. Одной критической секции достаточно для организации элементарной очереди. Без всяких виндовых SendMessage, IOCP и проч. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 00:13 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
МиксионисюниТогда и одного потока с головой хватит, написав код линейно Линейный код сложно разделить на модули. Именно тот случай, когда ощущается отсталость Дельфи. В данном случае в виде малого количества компонент для реактивного программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 00:17 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilar, Спасибо, поржал перед сном ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 00:23 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
на самом то деле, задача выглядит так 1) Создание всех ком объектов 2) Создание цикла - который будет ждать некий конечный статус, а пока его нет - выполнятся бесконечно 3) Делать проверку ту самую (Которую хотели вынести в отдельный поток, и поток первый ждал бы пока второй поток отработает, и вернёт эту метку на проверку) 4) В проверке делать что хотелось 5) После получения метки конца главного цикла, после цикла уничтожить созданные ком объекты - избавить код от постоянном пересоздание и удалении. stanilar , Ржу не могу) Модули = функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 01:10 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
МиксионисюниМодули = функции А меня учили что в Дельфи для модульности используются Unit'ы. МиксионисюниРжу не могу) Грех смеяться над отсталыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 01:21 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilarМиксионисюниТогда и одного потока с головой хватит, написав код линейно Линейный код сложно разделить на модули. Именно тот случай, когда ощущается отсталость Дельфи. В данном случае в виде малого количества компонент для реактивного программирования. Закусывать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 12:21 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
makhaonЗакусывать надоКстати, "реактивное программирование" - интересный термин. Новый наверно, раньше не встречал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 13:48 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockmakhaonЗакусывать надоКстати, "реактивное программирование" - интересный термин. Новый наверно, раньше не встречал. Это, наверное, как экстремальное программирование, когда мысль прет и хочется в туалет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 13:52 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilarА меня учили что в Дельфи для модульности используются Unit'ы. Простой пример Код: pascal 1. В идеале он сам должен подхватит ближайшую объявленную функцию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 14:19 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
wadmanЭто, наверное, как экстремальное программирование, когда мысль прет А почему не: "А зачем это в дельфистам"? YuRockКстати, "реактивное программирование" - интересный термин. Новый наверно, раньше не встречал. Чуть постарше Дельфи. Наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 19:57 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
МиксионисюниПростой пример Пример чего? Что для разделения нужны юниты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 20:00 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilarYuRockКстати, "реактивное программирование" - интересный термин. Новый наверно, раньше не встречал. Чуть постарше Дельфи. НаверноеПогуглил. Да, есть такое. Нет, не старше, но это не важно. Важно то, что в "реактивном программировании" речь идет о потоках данных. А в этом топике - о потоках кода. Это, как бы, разные сущности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 20:10 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockА в этом топике - о потоках кода. Автору нужно получить событие о завершении работы расчетного потока. Как раз событие завершение работы расчетного потока и есть поток данных. По сути реактивность это те-же потоки. На практике можно было бы отказаться от того потока, в котором идет ожидание, заменив его на две процедуры: генерация события передачи данных в поток и событие получение результата расчета. Как раз удобно, когда слушателей много. Удобно именно с точки зрения оформления кода. Конечно, можно посмотреть есть ли что в OTL, но дельфя у меня уже давно не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 20:39 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilar, Всё, что ты написал, делается элементарно и на делфи и на чем угодно. Тупо вызвать коллбэки (извини, "события") у подписанных "читателей". Только это ад несусветный. Да, иногда - удобно. Как в экселе - одна ячейка другие обновляет. Но в общем - нет. Автору нужно не это, не огород "событий" городить. Ему нужно просто организовать очередь и в других потоках дожидаться выполнения заданий, добавленных в эту очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 20:53 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockделается элементарно ... В сферическом примере - да. На практике будут разные ситуации типа преждевременного завершения ожидающего потока. Или ожидания разными потоками получения одинаковых данных. YuRockогород Вот как раз колхозить огород тут предлагаешь именно ты. Мое предложение (будь такая возможность) - воспользоваться проработанной теорией (а если говорить про другие ЯП то и практикой). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 21:12 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilarYuRockделается элементарно ... В сферическом примере - да. На практике будут разные ситуации типа преждевременного завершения ожидающего потокаНу это если сделать "две функции", как предлагаешь ты. А если мониторить отписку читателей - проблемы такой не будет. Все, конечно, больше и больше усложняется. Именно это наверно и нужно автору - усложнить задачу. Получается, так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 21:38 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilarВот как раз колхозить огород тут предлагаешь именно ты. Мое предложение (будь такая возможность) - воспользоваться проработанной теорией (а если говорить про другие ЯП то и практикой).Мой колхозный огород - прост, понятен и нагляден как 3 копейки. В отличие от "теории". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 21:39 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockМой колхозный огород - прост, понятен и нагляден как 3 копейки. А еще он ничем не отличается от моего. В очередь ведь будут добавляться что-то типа колбэков(событий)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 21:44 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockА если мониторить отписку читателей - проблемы такой не будет. В реактивности, аналогично, можно отписаться от сервера событий. Речь то, на самом деле, про наличие проработанных компонент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 21:48 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilarYuRockМой колхозный огород - прост, понятен и нагляден как 3 копейки. А еще он ничем не отличается от моего. В очередь ведь будут добавляться что-то типа колбэков(событий)?Нет, конечно. Просто указатель на память под результат (если нужно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 21:59 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockНет, конечно. А как сообщить ждущему потоку, что данные пришли? Он будет сам, в цикле, проверять наличие данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 22:14 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilar, Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 00:57 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilarYuRockНет, конечно. А как сообщить ждущему потоку, что данные пришли? Он будет сам, в цикле, проверять наличие данных?Взвести событие, сигнализирующее об этом. Не коллбэк, а событие, которого ожидающий поток ждет и спит при этом, без всяких циклов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 11:11 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
YuRockstanilarпропущено... А как сообщить ждущему потоку, что данные пришли? Он будет сам, в цикле, ш8проверять наличие данных?Взвести событие, сигнализирующее об этом. Не коллбэк, а событие, которого ожидающий поток ждет и спит при этом, без всяких циклов. Вот сейчас как раз сижу, разбираюсь с TEvent Штудирую конец этой статьи: Потоки и методы их синхронизаций в Delphi ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 14:20 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Thread, Хватит TSimpleEvent. TEvent - именованные - для междупроцессных взаимодействий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 14:23 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
истопник в кедах Ну не цикл конечно, тем более что способ реализации WaitOrSignalObject выходит не только за рамки моей компетенции но и интересов(подразумевается, что реализация могла быть через цикл). Но смысл дискуссии был немного про другое. Вот ты, вместо того, чтоб передать коллбэк из потока в общий список, передал коллбэк реализации списка в поток. И что, теперь коллбэк перестал быть коллбэком? P/S/ Не радует меня справка любимой среды WaitOrSignalObject helpEmbarcadero Technologies does not currently have any additional information. Please help us document this topic by using the Discussion page! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 18:36 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
stanilar я это, адресатом ошибся. Пример ТС-у был - в ответ на его картинку. Ну и типа кроссплатформа. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Если про коллбэк - то вопрос в том, в контексте какого потока он будет выполнен и как это реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 19:29 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Я еще во многом не разобрался, но вот в процессе поиска попалась мне очень настораживающая статья: WaitForSingleObject. Why you should never use it. . Там как раз обыгрывается моя ситуация с COM объектами в потоке и как следствие скрытые окна и возможные блокировки. Но я еще не всё осознал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 19:44 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Thread, 1. Статью не читал. Эта функция - основа всех основ. 2. Если твои COM-объекты окна любят выбрасывать - то, конечно, в доп. потоке реализовать работу будет сложно, мягко говоря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 20:25 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Threadнастораживающая статья: WaitForSingleObject. Why you should never use it. . а ещё https://www.transl-gunsmoker.ru/2010/03/msgwaitformultipleobjects.html и тогда Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2018, 20:29 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Спасибо всем, кто откликнулся! Я решил (как мне кажется) проблему через два TEvent'a. Ниже выкладываю код диаграмму работы. Бросьте пожалуйста взгляд, всё ли в порядке. TThread1 = class(TThread) Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2018, 15:12 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Thread Код: pascal 1. "Не читал...", замени на CoInitializeEx(nil, COINIT_MULTITHREADED) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2018, 15:23 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. спасибо, не знал. Я долго не мог взять в толк насчет TEvent'a, пока не догадался, что их нужно два. Я ведь прав? (скопирую картинку с предыдущей страницы, а то она бесполезно никем не будет увидена) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2018, 15:37 |
|
||
|
Как организовать ожидание пока Thread не отработает задание
|
|||
|---|---|---|---|
|
#18+
Ну и вариант от меня: \.m./ :) Два потока. Первый запускает второй и получает от него ответ в своем контексте. Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. Task1 из WCThread1, соответственно Task2 из WCThread2. Лог: MainThread: 13736 основной поток Task1Execute thread: 10176 первый поток Task1Finish thread: 13736 основной поток Task2Execute thread: 1188 второй поток Task2Finish thread: 10176 первый поток ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2018, 16:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2040896]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
50ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 355ms |

| 0 / 0 |
