【发布时间】:2018-06-28 17:48:28
【问题描述】:
我尝试使用 usleep 确保每个循环的执行时间为 10ms,但有时会超过 10ms。
我不知道如何解决这个问题,使用 usleep 和 gettimeofday 是否合适这个案例?
请帮我找出我错过了什么。
结果:0.0127289 0.0136499 0.0151598 0.0114031 0.014801
double tvsecf(){
struct timeval tv;
double asec;
gettimeofday(&tv,NULL);
asec = tv.tv_usec;
asec /= 1e6;
asec += tv.tv_sec;
return asec;
}
int main(){
double t1 ,t2;
t1 = tvsecf();
for(;;){
t2= tvsecf();
if(t2-t1 >= 0.01){
if(t2-t1 >= 0.011)
cout << t2-t1 <<endl;
t1 = tvsecf();
}
usleep(100);
}
}
【问题讨论】:
-
首先,您必须确定您使用的是哪种语言……
-
通常,只要您要求,睡眠只能保证睡至少 - 他们可能会睡得更久。
-
我认为
nanosleep是首选睡眠。 -
这听起来像XY problem。您实际上想要达到什么目的?
-
如果您确实需要每 10 毫秒执行一次操作且不会失败(并且不要只是认为您会这样做),那么您将需要在实时操作系统上运行您的程序
标签: c++ linux time gettimeofday