我试图在进程之间发送信号,而我需要在我的信号生成循环中允许0.01到0.1秒的随机时间延迟。所以这就是我正在做的事情,但它绝对不是在0.01到0.1之间,而是变成了1秒。不确定我错过了什么。
sleepTime = 100000L+(long)((1e6-1e5)*rand()/(RAND_MAX+1.0));
usleep(sleepTime);
我试图在进程之间发送信号,而我需要在我的信号生成循环中允许0.01到0.1秒的随机时间延迟。所以这就是我正在做的事情,但它绝对不是在0.01到0.1之间,而是变成了1秒。不确定我错过了什么。
sleepTime = 100000L+(long)((1e6-1e5)*rand()/(RAND_MAX+1.0));
usleep(sleepTime);
如果你使用的是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)});
}
这可能不是您的教授所要寻找的。 :-)
你的所有常量都大了10倍!试试
sleepTime = 10000L+(long)((1e5-1e4)*rand()/(RAND_MAX+1.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 ) ;
100000L
是100毫秒,而不是10毫秒。