C++代码优化:解决进程存在时仍重置CPU信息问题
我再次检查了您的代码,并发现了一个问题。在您的代码中,即使进程存在,也会将 'cpu_info_' 的值设置为1,而不是保持原值。
为了解决这个问题,我们可以在判断进程是否存在后,只更新 'cpu_info_' 的值而不是重新赋值。下面是修改后的 'clear_cpu_info_()' 函数的示例代码:
#include <cstdio>
#include <iostream>
#include <string>
#include <mutex>
void MONITOR_BASE::clear_cpu_info_()
{
static std::mutex cpu_mutex; // 定义静态互斥锁
std::string process_name = "auto_ad_memory_monitor";
std::string check_process_cmd = "pidof " + process_name;
FILE* pipe = popen(check_process_cmd.c_str(), "r");
char buffer[128];
std::string result = "";
while (fgets(buffer, sizeof(buffer), pipe) != nullptr)
{
result += buffer;
}
pclose(pipe);
bool process_exists = !result.empty();
// 加锁保护对 cpu_info_ 的访问
std::lock_guard<std::mutex> lock(cpu_mutex);
if (process_exists)
{
// 进程存在,更新 cpu_info_ 的值
cpu_info_.auto_ad_memory_monitor.cpu.data += 1;
cpu_info_.auto_ad_memory_monitor.mem.data += 1;
cpu_info_.auto_ad_memory_monitor.vsz.data += 1;
}
else
{
// 进程不存在,将对应的 cpu_info_ 值清零
cpu_info_.auto_ad_memory_monitor.cpu.data = 0;
cpu_info_.auto_ad_memory_monitor.mem.data = 0;
cpu_info_.auto_ad_memory_monitor.vsz.data = 0;
}
}
在这个修改后的代码中,我将原来的赋值操作改为了自增操作。如果进程存在,我们将 'cpu_info_' 的值进行自增操作,以实现持续增加的效果。如果进程不存在,则将 'cpu_info_' 的值清零。
希望这个修改后的代码能够解决您遇到的问题。如果还有其他问题,请随时提问。非常抱歉之前给您带来的困扰。
原文地址: https://www.cveoy.top/t/topic/lrt 著作权归作者所有。请勿转载和采集!