在你的代码中,你使用 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助手提供,问题来源于学员提问