我再次检查了您的代码,并发现了一个问题。在您的代码中,即使进程存在,也会将 '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_' 的值清零。

希望这个修改后的代码能够解决您遇到的问题。如果还有其他问题,请随时提问。非常抱歉之前给您带来的困扰。

C++代码优化:解决进程存在时仍重置CPU信息问题

原文地址: https://www.cveoy.top/t/topic/lrt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录