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

Timer 支持重叠I/O(用于IOCP)的计时器?,timer,filehandle,iocp,overlapped-io,Timer,Filehandle,Iocp,Overlapped Io,我需要在基于I/O完成端口(IOCP)的应用程序中添加计时器支持。我希望避免使用特定线程来管理计时器 在Linux上,您可以创建一个通过文件描述符发送过期通知的计时器(请参阅timerfd.hman),因此,如果您的应用程序基于epoll,最好将其用于epoll 在Windows上,您可以将“可等待计时器”与异步过程调用(ACP)一起使用(请参阅) 如果您感兴趣,kqueue(BSD,Mac OS)默认支持计时器(请参阅EVFILT_TIMER) 对于I/O完成端口,我们必须使用支持重叠I/O的

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

在Linux上,您可以创建一个通过文件描述符发送过期通知的计时器(请参阅timerfd.hman),因此,如果您的应用程序基于epoll,最好将其用于epoll

在Windows上,您可以将“可等待计时器”与异步过程调用(ACP)一起使用(请参阅)

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

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

致以最良好的祝愿


据我所知,没有计时器在IOCP到期时生成IOCP完成

您可以尝试Windows计时器队列


我最终编写了自己的计时器队列,它确实使用了一个额外的线程来运行计时器,因此这可能对您没有好处:请参阅一系列文章,其中我使用TDD和完整单元测试实现了队列。我正在使用相同的接口实现更高性能的TimerWheel,但这将再次使用外部线程来管理计时器。

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