好的,几个小时前我问this,我决定用C做同样的测试。
示例1:
#include <stdio.h>
#include <sys/time.h>
void main()
{
printf("Time testing, pure c\n");
struct timeval tv;
int i;
int values[1000];
useconds_t usec = 1000;
for (i = 0; i < 1000; i++)
{
gettimeofday( &tv, NULL );
values[i] = tv.tv_usec;
usleep(usec);
}
for (i = 0; i < 1000; i++)
{
printf("%d\n", values[i]);
}
}
输出:
...
110977
111977
112977
113977
114978
115978
116978
...
好的,不错! 1毫秒睡眠没问题,现在让我们试试100 us sleep(相同的代码,只使用c = 100):
#include <stdio.h>
#include <sys/time.h>
void main()
{
printf("Time testing, pure c\n");
struct timeval tv;
int i;
int values[1000];
useconds_t usec = 100;
for (i = 0; i < 1000; i++)
{
gettimeofday( &tv, NULL );
values[i] = tv.tv_usec;
usleep(usec);
}
for (i = 0; i < 1000; i++)
{
printf("%d\n", values[i]);
}
}
输出:
...
674680
675680
676680
677680
678680
679680
680681
681681
...
这很糟糕,因为它的结果是一样的!只改变毫秒,并且usecs不会改变! 那是怎么回事,我的错误在哪里? 我可以在Windows中正确地获得微秒吗?