0

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

ответ

1

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

1

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

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

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