select() - 有能力的计时器

And*_*fas 10 c linux select system-calls

select()是一个很棒的系统调用.您可以打包任意数量的文件描述符,套接字描述符,管道等,并在输入可用时以同步方式获得通知.

有没有办法创建一个interval/oneshot计时器并与select()一起使用?这将使我免于拥有多个线程用于IO和计时.

nos*_*nos 12

timerfd_create就是这样做的.这是Linux内核的一个相当新的补充,但可能并不适用于所有发行版.

  • 这也是一个signalfd调用,以防你想要作为fd事件发送的信号:-) (2认同)

Mar*_*rkR 7

使用timeout参数 - 将计时器事件保存在优先级队列中,检查顶部项并相应地设置超时 - 如果达到超时,则可以检查事件是否准备好运行,运行事件并继续.

至少那是我的工作.

请注意,poll具有更好的界面(在某些方面),并且可能更有效地使用大量文件描述符.