linux下的select函数是干嘛的?

头文件有
#include <pthread.h> 
#include <sys/time.h> 
#include "thread.h"
相关代码为
void Thread::sleep(unsigned int milliSeconds) 

timeval timeout = { milliSeconds/1000, milliSeconds%1000}; 
select(0, NULL, NULL, NULL, &timeout); 
}

RISEBY
浏览 678回答 2
2回答

万千封印

select是用来设置超时时间的,其第一个参数本来是一个文件号,假如读取该文件长时间没有返回则超时跳出,而这部分代码将文件号设置为0,说明只是为了控制延时不过看你这部分代码,明显只是实现一个比较精确定时的sleep这段代码之所以这么做,是因为linux本身的sleep函数非常不准(windows也是一样),在线程较多,cpu任务较重的时候,sleep函数的精确度根本无法达到要求于是你这段代码使用select来代替sleep更为精准,其精准程度和内核相关,如果内核的滴答频率决定的,一般是100HZ也有1000hz的(因内核版本不同而不同),也就是说select做多可以精确到10ms,或者1ms,而sleep就做不到于是这段函数最重要的作用就是用高精确的select函数来代替低精确度的sleep函数,实现时间较为精准的延时

MMMHUHU

不是用得很好吗?精确延时功能。此外,可以用来判断读写操作是否在指定时间内就绪。
打开App,查看更多内容
随时随地看视频慕课网APP