头文件有#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); }
2 回答
万千封印
TA贡献1891条经验 获得超3个赞
select是用来设置超时时间的,其第一个参数本来是一个文件号,假如读取该文件长时间没有返回则超时跳出,而这部分代码将文件号设置为0,说明只是为了控制延时
不过看你这部分代码,明显只是实现一个比较精确定时的sleep
这段代码之所以这么做,是因为linux本身的sleep函数非常不准(windows也是一样),在线程较多,cpu任务较重的时候,sleep函数的精确度根本无法达到要求
于是你这段代码使用select来代替sleep更为精准,其精准程度和内核相关,如果内核的滴答频率决定的,一般是100HZ也有1000hz的(因内核版本不同而不同),也就是说select做多可以精确到10ms,或者1ms,而sleep就做不到
于是
这段函数最重要的作用就是用高精确的select函数来代替低精确度的sleep函数,实现时间较为精准的延时
- 2 回答
- 0 关注
- 677 浏览
添加回答
举报
0/150
提交
取消