Есть ли в C32 кросс-платформенное именованное событие, такое как CreateEvent()?
Я ищу что-то аналогичное CreateEvent(), SetEvent() и WaitForMultipleObjects() из мира Win32.
В частности, это должно быть доступно для всех процессов на одной машине.
Мы уже используем Poco для некоторых кроссплатформенных вещей, но я не вижу, что Poco::Event - это то, что я хочу. возможно я что-то упустил.
РЕДАКТИРОВАТЬ:
Чтобы объяснить, что я хочу сделать:
Я хочу, чтобы процесс B знал, когда что-то происходит в процессе A. Это тривиально в win32 - каждый процесс / поток вызывает CreateEvent () с именем для события. Процесс B вызывает waitForXObject(), а процесс A вызывает SetEvent (), когда что-то происходит. Б сигнализируется.
Опять же, в win32 это тривиально, но как это сделать кроссплатформенно.
3 ответа
В C++ нет встроенного способа делать именованные события. Но вы можете использовать повышение, чтобы сделать это.
Вы ищете boost::condition и boost::named_condition
Как вы также упомянули, существует: Poco.NamedEvent
boost имеет ряд кроссплатформенных потоковых примитивов, подобных этому.
посмотрите на boost:mutex
На самом деле, посмотрите на кросс-платформенный эквивалент событий Windows
Ой - увидев ответ Брайана о названных событиях, мне кажется, я пропустил решение Поко:
http://pocoproject.org/docs/Poco.NamedEvent.html
Я видел только Poco.Event
Мы, вероятно, воспользуемся этим, поскольку в клиентском коде он кажется более простым и легким.