Nanosleep не работает с несколькими потоками

У меня проблема с функцией nanosleep ().

В тестовом проекте все работает как положено.
В реальном проекте это не так: это как если бы время сна было равно нулю.

Насколько я вижу, самая большая разница между тестом и реальным проектом заключается в количестве потоков: один в тесте, два в реальном.

Может ли это быть причиной?

Если я добавлю вызов nanosleep в код, выполняемый одним потоком, разве этот поток не должен остановиться?

Спасибо.

-1

Решение

На 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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]