簡體   English   中英

隨機時間延遲

[英]Random time delay

我正在嘗試在進程之間發送信號,我需要在我的信號生成循環中允許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));  

三件事:

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

2)usleep只能保證至少在參數時間內睡覺,不能保證睡眠時間。 閱讀聯機幫助頁:所有睡眠功能都會產生該斷言。

3)你如何測量需要多長時間? 您使用的是具有毫秒或微秒分辨率的計時器嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM