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

6
我需要在基于I/O完成端口(IOCP)的应用程序中添加计时器支持。我希望避免使用特定线程来管理计时器。
在Linux上,您可以创建一个计时器,通过文件描述符传递到期通知(请参阅timerfd.h man),因此,如果您的应用程序基于epoll,则可以很好地使用它。
在Windows上,您可以使用"可等待计时器"与异步过程调用(ACP) (请参阅http://msdn.microsoft.com/en-us/library/ms686898(v=VS.85).aspx)
如果您有兴趣,kqueue(BSD,Mac OS)默认支持计时器(请参阅EVFILT_TIMER)。
使用I/O完成端口,我们必须使用支持重叠I/O的对象。那么,是否有这样的计时器适用于IOCP?
最好的问候,
Cédrics
2个回答

5
据我所知,没有计时器在到期时生成IOCP完成。您可以尝试使用Windows计时器队列CreateTimerQueueTimer。我最终编写了自己的计时器队列,它确实使用了额外的线程来运行计时器,所以可能不适合您:请参见这里中的一系列文章,其中我使用TDD和完整单元测试实现了该队列。我正在实施一个具有相同接口的更高性能的TimerWheel,但同样会使用外部线程来管理计时器。

0
你可以使用可等待计时器,并使用“PostQueuedCompletionStatus”将自定义数据包排队到完成端口。但请记住,如果有多个工作线程,只有一个线程会被通知。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接