Функция timer_create и TimerQueueTimer в переносимой библиотеке (например, boost) - PullRequest
1 голос
/ 12 февраля 2012

Я написал программу, которая работает в Linux и использует sigevent и timer_create, чтобы иметь функцию обратного вызова, вызываемую периодически с заданной частотой.Теперь я хочу, чтобы программа была переносимой (Windows и Linux), поэтому долгий путь для этого - использовать #ifdefs и использовать эквивалентную функциональность Windows.

AFAIK, эквивалентом для окон будет TimerQueueTimer.

Я знаю, что это служба ОС, но, как и поток, ее можно сделать переносимой с помощью библиотеки, такой как Boost C ++.

Вопрос: знаете ли вы, есть ли такие вещи вУвеличить библиотеку C ++, или, может быть, в POCO или другой респектабельной библиотеке?

Если она отсутствует, то есть ли что-то, препятствующее присутствию такой вещи в переносимой библиотеке?asio :: deadline_timer - это не то, что я ищу, это должен быть сервис, который периодически вызывает функцию обратного вызова с той же точностью, что и timer_create и TimerQueueTimer.

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

POCO имеет многопоточный класс Timer, который запускает TimerTask (s).По сути, вы переопределяете метод run () TimerTask на то, что вы хотите сделать, когда истечет время таймера.Несколько объектов могут быть добавлены в объект Timer, который порождает поток для последовательного запуска всех отложенных задач.Задачи могут быть одноразовыми или с интервальным повторением.

Не уверен, что оно отвечает всем вашим потребностям, но стоит посмотреть.

0 голосов
/ 11 июня 2013

Я бы настоятельно рекомендовал ACE (адаптивная среда связи). В частности, посмотрите на класс ACE_Reactor и метод ACE_Reactor :: schedule_timer (...).

Посетите страницу Wiki для получения более общей информации о ACE.

Или перейдите непосредственно на официальный сайт.

...