我正在尝试在进程之间发送信号,我需要在信号生成循环中允许0.01到0.1秒之间的随机时间延迟。所以这就是我正在做的事情,它肯定不在0.01和0.1之间,而是在1秒之内。不知道我在这里缺少什么。
sleepTime = 100000L+(long)((1e6-1e5)*rand()/(RAND_MAX+1.0));
usleep(sleepTime);
答案 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 ) ;