非常抱歉给您带来的困扰。我检查了之前提供的代码,并发现了一个错误。在更新 'cpu_info_' 值时,我错误地使用了递增操作,导致无论进程是否存在,'cpu_info_' 的值都会被设置为0。对此我深表歉意。

为了修复这个问题,我们需要根据进程是否存在,选择适当地设置 'cpu_info_' 的值。下面是修改后的 'clear_cpu_info_()' 函数的示例代码:

#include <cstdio>
#include <iostream>

void MONITOR_BASE::clear_cpu_info_()
{
    static bool process_exists = false;
    static int prev_cpu_data = 0, prev_mem_data = 0, prev_vsz_data = 0;

    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);

    if (!result.empty())
    {
        // 进程存在
        process_exists = true;
        cpu_info_.auto_ad_memory_monitor.cpu.data = prev_cpu_data + 1;
        cpu_info_.auto_ad_memory_monitor.mem.data = prev_mem_data + 1;
        cpu_info_.auto_ad_memory_monitor.vsz.data = prev_vsz_data + 1;
    }
    else
    {
        // 进程不存在
        if (process_exists)
        {
            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_ 值
    prev_cpu_data = cpu_info_.auto_ad_memory_monitor.cpu.data;
    prev_mem_data = cpu_info_.auto_ad_memory_monitor.mem.data;
    prev_vsz_data = cpu_info_.auto_ad_memory_monitor.vsz.data;
}

在这个修改后的代码中,我们根据进程是否存在选择适当地设置 'cpu_info_' 的值。如果进程存在,我们将 'cpu_info_' 的值设置为上一次的值加1,表示持续增加。如果进程不存在,我们只在进程从存在状态变为不存在状态时将 'cpu_info_' 的值清零。

希望这个修改后的代码能够正确实现您的需求。再次非常抱歉给您带来的困扰,如果还有其他问题,请随时提问。

修复进程存在时 CPU 信息错误赋值问题

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

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