我们的教授在课堂上给了我们这个代码:
st = select(max+1, &rs, NULL, NULL, &timeinterval);
if(st){
for(int i=0; i<workers; i++)
{
if(FD_ISSET(channels[i]->read_fd(), &rs))
老实说,我很难理解它在做什么。我试图研究更多关于pthreads的东西,但似乎没有任何东西可以解释它在做什么。他说这与文件描述符有关,但我不明白这是如何在这段代码中出现的。
2条答案
按热度按时间soat7uwm1#
这个
select
的目的是等待多个文件描述符,当它返回一个正数时,可能会超时,这意味着rs
集合中至少有一个fd准备好阅读,因此在循环中,您可以检查哪个fd是它,并对其执行读取。注意,你应该检查是否大于0,因为如果出现错误,将返回-1,你不应该检查fd_set,而是处理错误:
4zcjmb1e2#
我使用select函数来创建一个短定时器的延迟。我想知道usleep(x)或sleep(x)是否比这个更好,尽管这个可能更精确: