[win] SetEvent
сильно не хочется делать manualreset и/или много RunEvent'ов, можно ли обойтись одним RunEvent'ом на запуск всех или это совсем не айс?Auto Reset Event не годится, если тебе надо пробудить нескольких клиентов.
Я когда такую штуку делал, остановился на варианте "много эвентов" - каждому треду свой. Главное, к PulseEvent не приближаться, это подлая какашка.
как-то странно ....
в чём смысл такого ограничения? ведь это легко, но криво (с потерей производительности) чинится разбиением DoneEvent'ов на пачки по MAXIMUM_WAIT_OBJECTS штук ...
как красиво дожидаться выполнения большого количества клиентов?
как красиво дожидаться выполнения большого количества клиентов?Используй семафор, зачем нужны отдельные события?
Оставить комментарий
state7401281
как правильно делать такое:- сервер ставит задачу
- даёт комманду клиентам считать (считать должны всё клиенты)
- ждёт результатов
- повторить
сервер выглядит примерно так:
а клиент примерно так:
проблема в том, что (наверное?) часть клиентов находится где-то между своим SetEvent(DoneEvents[MyId]) и WaitForSingleObject(RunEvent, INFINITE) в тот момент, когда сервер делает SetEvent(RunEvent) в итоге пока клиенты непойми где, event autoreset'ится, и дальше получается дедлок, т.к. сервер ждёт DoneEvent'ы, а часть клиентов так и не получит RunEvent'а (он autoreset'ился)
и кстати правильно понимаю, что даже если несколько тредов вызвали waitforsingleobject и уже ждут event, то не факт, что _все_ они выйдут из wait'а при setevent'е?
сильно не хочется делать manualreset и/или много RunEvent'ов, можно ли обойтись одним RunEvent'ом на запуск всех или это совсем не айс?