ZBLOG

LG2_LOG_INFO("{} update value is {}", name, rawValue); //TODO: some sensors is virtual temp if ((name.find("PCIE") != std::string::npos) || ((name.find("DPU") != std::string::npos)) || (name == "OCP_Temp") ...

在你的代码中,你使用 std::srand(std::time(0)); 来设置随机数生成器的种子。由于你每次调用这个函数时,都是用当前时间作为种子,如果调用之间的时间间隔非常短(通常在同一秒内),则 std::time(0) 返回的值是相同的,因此会导致生成相同的随机数序列。

为了解决这个问题,你应该只在程序开始时或者仅在必要的时候调用一次 std::srand()。这样可以确保随机数生成器只被初始化一次,而不是在每次进入条件语句时都重新初始化。

修改后的代码如下:

static bool isSeeded = false; // 静态变量,确保只初始化一次

if (!isSeeded) {
    std::srand(std::time(0)); // 用当前时间作为种子,只执行一次
    isSeeded = true;
}

LG2_LOG_INFO("{} update value is {}", name, rawValue);
//TODO: some sensors are virtual temp
if ((name.find("PCIE") != std::string::npos) ||
    ((name.find("DPU") != std::string::npos)) || 
    (name == "OCP_Temp") || (name == "IO_QSFP_Temp"))
{
    rawValue = std::rand() % (40 - 30 + 1) + 30; // 在这里生成随机数
}

updateValue(rawValue);

这样,每次程序运行时都会用当前时间设定一个随机数种子,而之后再次进入条件语句时将不会重复设置种子,从而避免生成相同的随机数。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=7979

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?