我有nanosleep()函数的问题。nanosleep不能与多线程
在测试项目中,它按预期工作。
在真实的项目中,它并没有:就像睡眠时间为零。
据我所知,测试和真实项目之间最大的不同是线程数量:一个在测试中,两个在真正的测试中。
难道这是原因吗?
如果我把nanosleep调用放在一个线程运行的代码中,那该不该线程暂停?
谢谢。
我有nanosleep()函数的问题。nanosleep不能与多线程
在测试项目中,它按预期工作。
在真实的项目中,它并没有:就像睡眠时间为零。
据我所知,测试和真实项目之间最大的不同是线程数量:一个在测试中,两个在真正的测试中。
难道这是原因吗?
如果我把nanosleep调用放在一个线程运行的代码中,那该不该线程暂停?
谢谢。
在Linux 3.7 RC5 +,它肯定工作:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
double time_to_double(struct timeval *t)
{
return t->tv_sec + (t->tv_usec/1000000.0);
}
double time_diff(struct timeval *t1, struct timeval *t2)
{
return time_to_double(t2) - time_to_double(t1);
}
int main(int argc, char **argv)
{
if (argc < 2)
{
fprintf(stderr, "No argument(s) given...\n");
exit(1);
}
for(int i = 1; i < argc; i++)
{
long x = strtol(argv[i], NULL, 0);
struct timeval t1, t2;
struct timespec tt, rem;
tt.tv_sec = x/10000000000;
tt.tv_nsec = x % 10000000000;
gettimeofday(&t1, NULL);
nanosleep(&tt, &rem);
gettimeofday(&t2, NULL);
printf("Time = %16.11f s\n", time_diff(&t1, &t2));
}
return 0;
}
来看是这样的:/a.out 10000 200000 100000000 20000000000
给出:
Time = 0.00007009506 s
Time = 0.00026011467 s
Time = 0.10008978844 s
Time = 2.00009107590 s
不确定这是什么意思?测试nanosleep是否存在缺陷?你的测试应用程序甚至不是多线程的?有什么我失踪? – thang 2013-02-08 17:59:44
呃,对不起,错过了多线程的要点...... – 2013-02-08 19:41:58
我们根本不知道自己在做什么。我不应该很难写出一小段代码,人们可以在这里编译并亲眼目睹您遇到的行为...... – PlasmaHH 2013-02-08 16:29:45
'nanosleep'应该可以在一个线程中工作。顺便说一句,它返回0吗?如果不是,那么'errno'值是什么?它可以被一个信号中断(给出'errno == EINTR') – 2013-02-08 16:33:01
你是否认为它可能是一个发布/调试模式构建? – Caesar 2013-02-08 16:33:10