Случайная задержка - PullRequest
       25

Случайная задержка

6 голосов
/ 28 сентября 2011

Я пытаюсь передавать сигналы между процессами, и мне нужно разрешить случайную задержку времени от 0,01 до 0,1 секунды в цикле генерации моего сигнала.Так что это то, что я делаю, и это, безусловно, не между 0,01 и 0,1, но выходит за 1 секунду.Не уверен, что мне здесь не хватает.

    sleepTime = 100000L+(long)((1e6-1e5)*rand()/(RAND_MAX+1.0));        
    usleep(sleepTime);

Ответы [ 4 ]

13 голосов
/ 28 сентября 2011

Если у вас есть C ++ 11:

#include <thread>
#include <random>
#include <chrono>

int main()
{
    std::mt19937_64 eng{std::random_device{}()};  // or seed however you want
    std::uniform_int_distribution<> dist{10, 100};
    std::this_thread::sleep_for(std::chrono::milliseconds{dist(eng)});
}

Это может быть не то, что ищет ваш проф.: -)

1 голос
/ 28 сентября 2011

Все ваши константы в 10 раз больше!Попробуйте

 sleepTime = 10000L+(long)((1e5-1e4)*rand()/(RAND_MAX+1.0));  
0 голосов
/ 28 сентября 2011

Самое простое - сгенерировать случайное число от 0 до 1, а затем использовать функцию lerp, чтобы перевести число в интервал от 0,01 до 0,1.

// returns random between 0 and 1
float randFloat() ;

// you are "val" % of the way from min to max
float lerp( float val, float min, float max ) ; 
0 голосов
/ 28 сентября 2011

Три вещи:

1) 100000L - это 100 мс, а не 10 мсек

2) usleep гарантированно спит только в течение как минимум времени аргумента, без гарантии того, какдолго будет спать.Прочтите man-страницу: все функции сна подтверждают это.

3) Как вы измеряете, сколько времени это займет?Вы используете таймер с разрешением в милли или микросекунду?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...