非好意思,给您带来了困扰。我再次检查了您的代码,并发现了问题所在。/n/n问题在于 'show_cpu_status()' 函数中调用 'isSubstring()' 函数的逻辑。'isSubstring()' 函数判断一个字符串是否是另一个字符串的子串,但在您的代码中,它可能会导致错误的判断。/n/n为了解决这个问题,我建议您使用更可靠的方法来判断进程名是否匹配。您可以使用 'std::regex_search()' 函数配合正则表达式来进行匹配。/n/n以下是修改后的示例代码:/n/ncpp/nvoid MONITOR_BASE::show_cpu_status()/n{/n std::vector<ProcessInfo1> process_info = getTopProcesses_CPU(MONITOR_CONSTANT::FIFTY);/n LOG(INFO) << /'CPU Temperature: /' << getCpuTemperature() << /'℃/';/n/n std::regex root_regex(std::string(std::getenv(/'AUTO_ROOT/')));/n/n for (auto& ele : process_info)/n {/n if (std::regex_search(ele.COMMAND, root_regex) && ele.COMMAND != /'/')/n {/n LOG(INFO) << /'Process(/' << getLastElement(ele.COMMAND)/n << /') take CPU(/' << ele.CPU/n << /'/%), MEM(/' << ele.MEM/n << /'/%), VSZ(/' << ele.VSZ / 1024 << /' MB)/';/n std::string process_name = getLastElement(ele.COMMAND);/n module_cpu_info(process_name, ele.CPU, ele.MEM, ele.VSZ);/n }/n }/n clear_cpu_info_();/n pub_memory_.publish(cpu_info_);/n}/n/n/n在这个修改后的示例代码中,我们使用 'std::regex' 类来构建正则表达式,并使用 'std::regex_search()' 函数进行匹配。'root_regex' 是 'AUTO_ROOT' 环境变量的值,它表示进程名中需要匹配的部分。/n/n请确保在调用 'show_cpu_status()' 函数之前,'std::getenv(/'AUTO_ROOT/')' 返回的环境变量值是正确的。/n/n希望这次的回答能够解决问题。非常抱歉之前的错误回答给您带来的困惑。如果您还有任何其他问题,请随时提问。

代码优化建议:使用正则表达式匹配进程名

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

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