我需要在基于 I/O 完成端口 (IOCP) 的应用程序中添加计时器支持。我想避免使用特定线程来管理计时器。
在 Linux 上,您可以创建一个通过文件描述符传递过期通知的计时器(请参阅timerfd.h man),因此如果您的应用程序基于 epoll,那么将它与 epoll 一起使用是非常好的。
在 Windows 上,您可以将“可等待计时器”与异步过程调用 (ACP) 结合使用(请参阅http://msdn.microsoft.com/en-us/library/ms686898(v=VS.85).aspx 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
据我所知,没有定时器在到期时生成 IOCP 完成。
你可以尝试Windows定时器队列;创建定时器队列定时器 http://msdn.microsoft.com/en-us/library/ms682485(v=VS.85).aspx.
我最终编写了自己的计时器队列,它确实使用了额外的线程来运行计时器,所以它可能对您没有好处:请参阅here http://www.lenholgate.com/blog/2004/05/practical-testing.html有关我使用 TDD 和完整单元测试实现队列的一系列文章。我正在实现具有相同接口的更高性能的 TimerWheel,但同样将使用外部线程来管理计时器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)