随机时间延迟

时间:2011-09-28 01:39:38

标签: c++ operating-system signals

我正在尝试在进程之间发送信号,我需要在信号生成循环中允许0.01到0.1秒之间的随机时间延迟。所以这就是我正在做的事情,它肯定不在0.01和0.1之间,而是在1秒之内。不知道我在这里缺少什么。

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

4 个答案:

答案 0 :(得分:13)

如果你有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 :(得分:1)

你所有的常数都是10倍太大了!尝试

 sleepTime = 10000L+(long)((1e5-1e4)*rand()/(RAND_MAX+1.0));  

答案 2 :(得分:0)

三件事:

1)100000L是100毫秒,而不是10毫秒

2)usleep只能保证至少在参数时间内睡觉,不能保证睡眠时间。阅读联机帮助页:所有睡眠功能都会产生该断言。

3)你如何衡量需要多长时间?您使用的是具有毫秒或微秒分辨率的计时器吗?

答案 3 :(得分:0)

最简单的方法是生成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 ) ;