У меня проблема с функцией 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
Других решений пока нет …