linux下的select函数是干嘛的
头文件有#include<pthread.h>#include<sys/time.h>#include"thread.h"相关代码为voidThread::sleep(u...
头文件有
#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);
} 展开
#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个回答
展开全部
select是用来设置超时时间的,其第一个参数本来是一个文件号,假如读取该文件长时间没有返回则超时跳出,而这部分代码将文件号设置为0,说明只是为了控制延时
不过看你这部分代码,明显只是实现一个比较精确定时的sleep
这段代码之所以这么做,是因为linux本身的sleep函数非常不准(windows也是一样),在线程较多,cpu任务较重的时候,sleep函数的精确度根本无法达到要求
于是你这段代码使用select来代替sleep更为精准,其精准程度和内核相关,如果内核的滴答频率决定的,一般是100HZ也有1000hz的(因内核版本不同而不同),也就是说select做多可以精确到10ms,或者1ms,而sleep就做不到
于是
这段函数最重要的作用就是用高精确的select函数来代替低精确度的sleep函数,实现时间较为精准的延时
不过看你这部分代码,明显只是实现一个比较精确定时的sleep
这段代码之所以这么做,是因为linux本身的sleep函数非常不准(windows也是一样),在线程较多,cpu任务较重的时候,sleep函数的精确度根本无法达到要求
于是你这段代码使用select来代替sleep更为精准,其精准程度和内核相关,如果内核的滴答频率决定的,一般是100HZ也有1000hz的(因内核版本不同而不同),也就是说select做多可以精确到10ms,或者1ms,而sleep就做不到
于是
这段函数最重要的作用就是用高精确的select函数来代替低精确度的sleep函数,实现时间较为精准的延时
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询