支持重叠I/O的定时器(对于IOCP)?

Céd*_*ics 5 timer filehandle iocp overlapped-io

我需要在基于I/O完成端口(IOCP)的应用程序中添加定时器支持.我想避免使用特定的线程来管理计时器.

在Linux上,您可以创建一个通过文件描述符提供过期通知的计时器(请参阅timerfd.h man),因此如果您的应用程序基于epoll,那么将它用于epoll非常棒.

在Windows上,您可以使用"waitable timers"和异步过程调用(ACP)(请参阅http://msdn.microsoft.com/en-us/library/ms686898(v=VS.85).aspx)

如果您有兴趣,kqueue(BSD,Mac OS)默认支持计时器(请参阅EVFILT_TIMER).

使用I/O完成端口,我们必须使用支持重叠I/O的objets.那么,IOCP有这样的计时器吗?

最好的祝福,

Cédrics

Len*_*ate 5

据我所知,没有定时器在过期时生成IOCP完成.

您可以尝试Windows计时器队列; CreateTimerQueueTimer.

最后我写我自己的定时器队列,其确实使用一个额外的线程来运行计时器,所以它可能不适合您:请参见这里进行了一系列的,我实现队列TDD和完整的单元测试文章.我在执行了相同的接口更高的性能TimerWheel的过程中,却再次将使用外螺纹管理计时器.