为了账号安全,请及时绑定邮箱和手机立即绑定

linux下的select函数是干嘛的?

linux下的select函数是干嘛的?

PHP
RISEBY 2019-02-07 16:07:14
头文件有#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函数,实现时间较为精准的延时

查看完整回答
反对 回复 2019-03-10
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

不是用得很好吗?精确延时功能。
此外,可以用来判断读写操作是否在指定时间内就绪。

查看完整回答
反对 回复 2019-03-10
  • 2 回答
  • 0 关注
  • 677 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信