Таймер, который поддерживает перекрытый ввод-вывод (для IOCP)?

Я должен добавить поддержку таймеров в приложении на основе Портов Завершения ввода-вывода (IOCP). Я хотел бы избежать использования определенного потока для управления таймерами.

На Linux можно создать таймер, который поставляет уведомления об истечении через дескриптор файла (см. timerfd.h человека), таким образом, замечательно использовать его, например, с epoll, если приложение основано на epoll.

В Windows можно использовать "waitable таймеры" с асинхронным вызовом процедуры (ACP) (см. http://msdn.microsoft.com/en-us/library/ms686898 (v=VS.85) .aspx),

Если Вам интересно, kqueue (BSD, Mac OS) поддерживает таймеры по умолчанию (см. EVFILT_TIMER).

С Портами Завершения ввода-вывода мы должны использовать objets, та поддержка перекрыла ввод-вывод. Так, есть ли такой таймер для IOCP?

С уважением,

Cédrics

5
задан Cédrics 13 July 2010 в 16:25
поделиться

1 ответ

Насколько я знаю, не существует таймеров, которые генерируют завершение IOCP по истечении срока действия.

Вы можете попробовать очередь таймеров Windows; CreateTimerQueueTimer.

В итоге я написал свою собственную очередь таймеров, которая использует дополнительный поток для запуска таймеров, так что это, вероятно, вам не подойдет: здесь смотрите серию статей, где я реализую очередь с TDD и полными модульными тестами. Я нахожусь в процессе реализации более производительного TimerWheel с тем же интерфейсом, но опять же, для управления таймерами будет использоваться внешний поток.

5
ответ дан 14 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: