【发布时间】:2011-01-20 15:37:36
【问题描述】:
select() 是一个很棒的系统调用。您可以打包任意数量的文件描述符、套接字描述符、管道等,并在输入可用时以同步方式获得通知。
有没有办法创建一个间隔/单次计时器并将其与 select() 一起使用?这将使我免于为 IO 和计时设置多个线程。
【问题讨论】:
-
你能说明你想要什么样的计时器吗?
select()有标准的超时参数。 -
定时器参数在select()内部使用。如果 select() 在超时之前没有得到任何挂起的读/写/错误,那么它将返回。我正在寻找的是一个将计时器转换为文件描述符并将其打包到 fd_set 中的命令。
-
select timeout 参数仅用于在没有其他事件的情况下超时,在此之上构建多个间隔计时器和一次性计时器是相当多的工作
-
关于“您可以打包任意数量的文件描述符、套接字描述符、管道”……这有点不正确。当
fd的值超过 1023 时,select开始崩溃。请参阅 here... 我会考虑在类似 BSD 的系统上使用kqueue,在基于 Linux 的系统上考虑epoll,在基于 Windows 的系统上考虑重叠 IO系统。
标签: c linux select system-calls