Linux中用的是时间片轮转算法,进程轮训要消耗时间,转换到一个进程来执行要消耗时间。结果在进程睡眠和运行过程中,许多时间已经过去了。
sleep()是以秒为单位的,要想延迟一个较小的时间,就需要用到usleep()。
另外还有个nanosleep(),用法好像很复杂。
usleep可能很难保证时间精度。我写了一段测试代码
#include
#include
#include
intmain(void)
{
inti;
structtimeval tvTotal;
structtimeval tvBegin, tvEnd, tvSub;
tvTotal.tv_sec = 0;
tvTotal.tv_usec = 0;
for(i = 0; i
{
gettimeofday(&tvBegin, NULL);
usleep(1000);// 1000 us(microsecond/微秒) = 1 ms(毫秒)
gettimeofday(&tvEnd, NULL);
timersub(&tvEnd, &tvBegin, &tvSub);
tvTotal.tv_sec += tvSub.tv_sec;
tvTotal.tv_usec += tvSub.tv_usec;
printf("%d\n", tvSub.tv_usec);
}
printf("try to usleep 1000 us 100 times, average of