当前位置: 技术问答>linux和unix
关于虚拟机下linux 定时的问题
来源: 互联网 发布时间:2016-08-05
本文导语: 我在虚拟机下发现一个问题,环境:虚拟机linux redhat 2.4 struct timeval g_tv_1,g_tv_2; struct timespec t; long g_RealDisTime_1; long g_RealDisTime_2; struct timespec t; t.tv_sec = 0; t.tv_nsec = 8000; gettimeofday (&g_tv_1, NULL); nanosleep(&t,NULL)...
我在虚拟机下发现一个问题,环境:虚拟机linux redhat 2.4
struct timeval g_tv_1,g_tv_2;
struct timespec t;
long g_RealDisTime_1;
long g_RealDisTime_2;
struct timespec t;
t.tv_sec = 0;
t.tv_nsec = 8000;
gettimeofday (&g_tv_1, NULL);
nanosleep(&t,NULL);
gettimeofday (&g_tv_2, NULL);
g_RealDisTime_1 = ((g_tv_1.tv_sec * 1000) + (g_tv_1.tv_usec / 1000));
g_RealDisTime_2 = ((g_tv_2.tv_sec * 1000) + (g_tv_2.tv_usec / 1000));
printf ("line %d, use %lu msn", __LINE__, g_RealDisTime_2-g_RealDisTime_1);
1.我调用nanosleep函数休眠ms级的时间完全不准,预期8ms,实际打出来10几到30几ms都出现
2.t.tv_nsec = 8000改成t.tv_nsec = 800000;实际打出来结果和1一样。感觉t.tv_nsec这个参数忽略了。
3.t.tv_sec = 1; t.tv_nsec = 800000; 实际打出来结果1000ms左右,同2 感觉t.tv_nsec这个参数忽略了
4.将nanosleep(&t,NULL);改成usleep(40000); 实际打出来结果40-50多ms 勉强符合预期。
5.将usleep(40000); 改成usleep(
struct timeval g_tv_1,g_tv_2;
struct timespec t;
long g_RealDisTime_1;
long g_RealDisTime_2;
struct timespec t;
t.tv_sec = 0;
t.tv_nsec = 8000;
gettimeofday (&g_tv_1, NULL);
nanosleep(&t,NULL);
gettimeofday (&g_tv_2, NULL);
g_RealDisTime_1 = ((g_tv_1.tv_sec * 1000) + (g_tv_1.tv_usec / 1000));
g_RealDisTime_2 = ((g_tv_2.tv_sec * 1000) + (g_tv_2.tv_usec / 1000));
printf ("line %d, use %lu msn", __LINE__, g_RealDisTime_2-g_RealDisTime_1);
1.我调用nanosleep函数休眠ms级的时间完全不准,预期8ms,实际打出来10几到30几ms都出现
2.t.tv_nsec = 8000改成t.tv_nsec = 800000;实际打出来结果和1一样。感觉t.tv_nsec这个参数忽略了。
3.t.tv_sec = 1; t.tv_nsec = 800000; 实际打出来结果1000ms左右,同2 感觉t.tv_nsec这个参数忽略了
4.将nanosleep(&t,NULL);改成usleep(40000); 实际打出来结果40-50多ms 勉强符合预期。
5.将usleep(40000); 改成usleep(