Как использовать nanosleep для сна в случайное количество времени? - PullRequest
1 голос
/ 20 июня 2011

Я пытаюсь использовать функцию nanosleep, чтобы заставить мой процесс спать в течение случайного промежутка времени между 1/10-й секунды?

я использую srand (), чтобы заполнить мой генератор случайных чисел, с процессомid, то есть я звоню:

srand(getpid());

, затем с помощью

struct timespec delay;
delay.tv_sec = 0;
delay.tv_nsec = rand();
nanosleep(&delay, NULL);

Как я могу убедиться, что я сплю в течение 0,1 / 10-й секунды?

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Я бы сказал, что вам просто нужно 100000000ULL * rand() / RAND_MAX наносекунд, это не более 0,1 с и не менее 0 с.Или попробуйте usleep() с аргументом 100000ULL * rand() / RAND_MAX.(Я думаю, что usleep требует меньше ресурсов процессора.)

( Edit: Добавлен спецификатор литерала «unsigned long long», чтобы обеспечить соответствие числа.за указание на это!)

0 голосов
/ 20 июня 2011

вам нужно "ограничить" ваш ранд (), например:

delay.tv_nsec = rand() % 1e8;

Некоторые эксперты говорят, что это не оптимальный способ сделать это, потому что вы используете младший бит числа, и они не так «случайны», как старшие биты, но это быстро и надежно.

...