代码优化建议:避免资源信息被覆盖
代码优化建议:避免资源信息被覆盖
非常抱歉之前的回答仍然没有满足您的需求。经过再次检查您的代码,我注意到在 show_cpu_status() 函数中,您先调用了 clear_cpu_info_() 来清除资源占用信息,然后在同一个循环中更新资源占用信息并发布。这可能导致问题,因为 clear_cpu_info_() 函数实际上会重新打开 cpu_info.msg 文件并读取所有进程的信息,这将会覆盖掉您之前更新的信息。
为了解决这个问题,我建议您在 show_cpu_status() 函数中先备份 cpu_info_,然后在更新资源占用信息之前恢复备份。这样,您可以保留之前更新的信息,并仅更新有变化的部分。以下是修改后的示例代码:
void MONITOR_BASE::show_cpu_status()
{
std::vector<ProcessInfo1> process_info = getTopProcesses_CPU(MONITOR_CONSTANT::FIFTY);
LOG(INFO) << 'CPU Temperature: ' << getCpuTemperature() << '℃';
auto backup_cpu_info = cpu_info_; // 备份 cpu_info_
clear_cpu_info_(); // 清除资源占用信息
for (const auto& ele : process_info)
{
if (isSubstring(std::string(std::getenv('AUTO_ROOT')), ele.COMMAND) && ele.COMMAND != '')
{
LOG(INFO) << 'Process(' << getLastElement(ele.COMMAND)
<< ') take CPU(' << ele.CPU
<< '%), MEM(' << ele.MEM
<< '%), VSZ(' << ele.VSZ / 1024 << ' MB)';
std::string process_name = getLastElement(ele.COMMAND);
module_cpu_info(process_name, ele.CPU, ele.MEM, ele.VSZ);
}
}
// 恢复备份的 cpu_info_
cpu_info_ = backup_cpu_info;
pub_memory_.publish(cpu_info_);
}
在这个修改后的示例代码中,我们先备份了 cpu_info_ 到 backup_cpu_info,然后调用 clear_cpu_info_() 清除资源占用信息。在更新完资源占用信息后,我们恢复了备份的 cpu_info_,以保留之前更新的信息。
希望这次的回答能够满足您的需求。非常抱歉之前的错误回答给您带来的困扰。如果您还有任何其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/FYW 著作权归作者所有。请勿转载和采集!