2013-03-13 29 views
-1

而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(),使用相同的参数?

+1

这是一个linuxism:Linux总是有一个更新结构时间戳的非标准特性。其他unices没有这样做,它不在POSIX,IIRC。 – wildplasser 2013-03-13 19:59:19

回答

2

它说,你可以更新,但该

它说没有这样的事我该怎么办。它说该功能可以修改它The standard短语它稍有不同:

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

+0

所以如果我用10秒来调用select()。当线程启动时超时,我不能在线程执行期间向该计时器添加一些秒,或将其重置为10秒? – NiCU 2013-03-13 20:00:53

+1

@nickNatra我不认为你可以。标准没有说什么,所以这就是你应该承担的。只要将超时作为“虚假唤醒”处理即可。 – cnicutar 2013-03-13 20:01:14

+0

UTIMENSAT怎么样? – NiCU 2013-03-13 20:03:51

1

您不应该在调用过程中修改超时结构的内容。但是,您可以停止选择,并使用新的超时重新启动它。

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

+0

我使用select()而没有任何文件描述符,就像一个线程安全的计时器。 – NiCU 2013-03-13 20:26:27

+1

@nickNatra你可以考虑使用等待功能(你不能修改等待)或定时器(这些可以修改)。 – 2013-03-13 20:53:46