C - select() - 如何正确更新计时器

时间:2013-03-13 19:54:15

标签: c multithreading posix

linux手册指出:

The operation of select() and pselect() is identical, other than these
       three differences:

       (i)    ...

       (ii)   select() may update the timeout argument to indicate how much time
              was left.  pselect() does not change this argument.
       (iii)  ...

它说你可以更新它,但我怎么能这样做? 我再次使用相同的参数调用select()?

2 个答案:

答案 0 :(得分:2)

  

它说你可以更新它,但我怎么能这样做

它说没有这样的事情。它说该功能可以修改它The standard短语略有不同:

  

成功完成后,select()函数可能会修改   超时参数指向的对象

答案 1 :(得分:1)

您不应在通话期间修改超时结构的内容。但是,您可以停止选择,并使用新的超时重新启动它。

通常,当您使用select创建多线程应用程序时,您可以提供一种方法来中断此调用以更新已处理文件描述符的列表。例如,这可以使用插座对来实现。套接字对的一个套接字用于控制线程,另一个套接字始终添加到fd_set。虽然它是一个不同的主题。