linux select定时精度,Linux定时器-select

通过select函数实现linux高精度定时器

timeval的结构如下:

struct timeval{

long tv_sec;/*secons*

long tv_usec;/*microseconds*/

}

精确到microseconds也即微妙。

一、秒级定时器

void seconds_sleep(unsigned seconds){

struct timeval tv;

tv.tv_sec=seconds;

tv.tv_usec=0;

int err;

do{

err=select(0,NULL,NULL,NULL,&tv);

}while(err<0 && errno==EINTR);

}

二、毫秒级别定时器

void milliseconds_sleep(unsigned long mSec){

struct timeval tv;

tv.tv_sec=mSec/1000;

tv.tv_usec=(mSec%1000)*1000;

int err;

do{

err=select(0,NULL,NULL,NULL,&tv);

}while(err<0 && errno==EINTR);

}

三、微妙级别定时器

void microseconds_sleep(unsigned long uSec){

struct timeval tv;

tv.tv_sec=uSec/1000000;

tv.tv_usec=uSec%1000000;

int err;

do{

err=select(0,NULL,NULL,NULL,&tv);

}while(err<0 && errno==EINTR);

}

注:timeval结构体中虽然指定了一个微妙级别的分辨率,但内核支持的分别率往往没有这么高,很多unix内核将超时值向上舍入成10ms的倍数。此外,加上内核调度延时现象,即定时器时间到后,内核还需要花一定时间调度相应进程的运行。因此,定时器的精度,最终还是由内核支持的分别率决定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值