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);
}
展开
 我来答
海狮2D
2010-06-15 · TA获得超过3019个赞
知道大有可为答主
回答量:1904
采纳率:55%
帮助的人:1010万
展开全部
不是用得很好吗?精确延时功能。
此外,可以用来判断读写操作是否在指定时间内就绪。
lihn1987
推荐于2016-10-07 · TA获得超过603个赞
知道答主
回答量:40
采纳率:0%
帮助的人:64万
展开全部
select是用来设置超时时间的,其第一个参数本来是一个文件号,假如读取该文件长时间没有返回则超时跳出,而这部分代码将文件号设置为0,说明只是为了控制延时
不过看你这部分代码,明显只是实现一个比较精确定时的sleep

这段代码之所以这么做,是因为linux本身的sleep函数非常不准(windows也是一样),在线程较多,cpu任务较重的时候,sleep函数的精确度根本无法达到要求
于是你这段代码使用select来代替sleep更为精准,其精准程度和内核相关,如果内核的滴答频率决定的,一般是100HZ也有1000hz的(因内核版本不同而不同),也就是说select做多可以精确到10ms,或者1ms,而sleep就做不到

于是
这段函数最重要的作用就是用高精确的select函数来代替低精确度的sleep函数,实现时间较为精准的延时
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式