【问题标题】:Timer that supports overlapped I/O (for IOCP)?支持重叠 I/O(用于 IOCP)的计时器?
【发布时间】:2011-03-15 10:08:36
【问题描述】:

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

在 Linux 上,您可以创建一个通过文件描述符传递到期通知的计时器(请参阅 timerfd.h 手册),因此如果您的应用程序基于 epoll,则可以将它与 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有这样的定时器吗?

最好的问候,

塞德里克

【问题讨论】:

    标签: timer filehandle iocp overlapped-io


    【解决方案1】:

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

    你可以试试 Windows 定时器队列; CreateTimerQueueTimer

    我最终编写了自己的计时器队列,它确实使用了一个额外的线程来运行计时器,所以它可能对你没有好处:请参阅here 了解我使用 TDD 和完整单元测试实现队列的一系列文章.我正在使用相同的接口实现更高性能的 TimerWheel,但同样会使用外部线程来管理计时器。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-07-15
        • 2021-06-29
        • 2019-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        • 2010-09-08
        相关资源
        最近更新 更多