Сброс потоковых событий - C ++ - PullRequest
0 голосов
/ 09 декабря 2010

Допустим, в моей функции потока есть оператор switch, который оценивает инициируемые события.Каждый случай - это отдельное событие.Лучше ли звонить на ResetEvent в конце дела или в начале?Мне кажется, что он должен идти в конце, так что событие не может быть запущено снова, пока поток не завершит обработку предыдущего события.Если оно помещено в начало, событие может быть инициировано снова во время обработки.

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

Если вы обрабатываете входящий трафик, используя один объект Event (подразумевая, что у вас нет входящей очереди), вы пропустите события.Это действительно то, что вы хотите?

Если вы хотите отследить все события, лучше подойдет полноценная очередь производитель-потребитель.Ссылочная реализация для Boost.Thread здесь .

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

1 голос
/ 09 декабря 2010

Да.думаю, что это путь.Создайте событие ручного сброса (второй параметр CreateEvent API), чтобы событие не сбрасывалось автоматически после его установки.

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