获取当前进程cpu瞬时占用[linux][windows][c++]

linux

#include <iostream>
#include <fstream>
#include <sstream>
#include <unistd.h>class ProcessCPUMonitor {
public:double getProcessCPUUsage() const {// 获取进程启动时间long startTime = getProcessStartTime();// 获取进程的 CPU 时间long utime, stime;if (getProcessCPUUsage(utime, stime)) {// 获取时钟滴答数的分辨率long clockTicks = sysconf(_SC_CLK_TCK);// 计算进程运行时间(秒)long currentTime = getCurrentTime();long elapsedTime = currentTime - startTime;// 计算 CPU 使用率double cpuUsage = 100.0 * ((utime + stime) / static_cast<double>(clockTicks * elapsedTime));return cpuUsage;} else {std::cerr << "Failed to get process CPU information.\n";return -1.0;}}private:// 获取进程启动时间long getProcessStartTime() const {std::ifstream statFile("/proc/self/stat");if (!statFile.is_open()) {std::cerr << "Failed to open /proc/self/stat file.\n";return -1;}std::string line;std::getline(statFile, line);std::istringstream iss(line);// Skip to the start time field (22nd field)for (int i = 0; i < 21; ++i) {iss.ignore();}long startTime;iss >> startTime;return startTime;}// 获取进程的 CPU 时间(utime和stime)bool getProcessCPUUsage(long& utime, long& stime) const {std::ifstream statFile("/proc/self/stat");if (!statFile.is_open()) {std::cerr << "Failed to open /proc/self/stat file.\n";return false;}std::string line;std::getline(statFile, line);std::istringstream iss(line);// Skip to the utime field (14th field)for (int i = 0; i < 13; ++i) {iss.ignore();}iss >> utime;// Skip to the stime field (15th field)for (int i = 0; i < 1; ++i) {iss.ignore();}iss >> stime;return true;}// 获取当前时间(时钟滴答数)long getCurrentTime() const {return sysconf(_SC_CLK_TCK);}
};int main() {ProcessCPUMonitor monitor;// Example: Print process CPU usage every 1 secondfor (int i = 0; i < 5; ++i) {sleep(1);std::cout << "Process CPU Usage: " << monitor.getProcessCPUUsage() << "%\n";}return 0;
}

windows

#include <iostream>
#include <windows.h>class ProcessCPUMonitor {
public:double getProcessCPUUsage() const {FILETIME createTime, exitTime, kernelTime, userTime;if (GetProcessTimes(GetCurrentProcess(), &createTime, &exitTime, &kernelTime, &userTime)) {// 转换 FILETIME 结构到 64 位整数ULARGE_INTEGER kernel, user;kernel.LowPart = kernelTime.dwLowDateTime;kernel.HighPart = kernelTime.dwHighDateTime;user.LowPart = userTime.dwLowDateTime;user.HighPart = userTime.dwHighDateTime;// 计算 CPU 使用率double cpuUsage = 100.0 * (static_cast<double>(kernel.QuadPart + user.QuadPart) / getElapsedTime());return cpuUsage;} else {std::cerr << "Failed to get process CPU information.\n";return -1.0;}}private:// 获取进程启动时间long long getProcessStartTime() const {FILETIME createTime, exitTime, kernelTime, userTime;if (GetProcessTimes(GetCurrentProcess(), &createTime, &exitTime, &kernelTime, &userTime)) {// 转换 FILETIME 结构到 64 位整数ULARGE_INTEGER createTime64;createTime64.LowPart = createTime.dwLowDateTime;createTime64.HighPart = createTime.dwHighDateTime;return createTime64.QuadPart;}return -1;}// 获取当前时间(100纳秒为单位)long long getCurrentTime() const {FILETIME currentTime;GetSystemTimeAsFileTime(&currentTime);// 转换 FILETIME 结构到 64 位整数ULARGE_INTEGER currentTime64;currentTime64.LowPart = currentTime.dwLowDateTime;currentTime64.HighPart = currentTime.dwHighDateTime;return currentTime64.QuadPart;}// 获取经过的时间(秒为单位)double getElapsedTime() const {long long startTime = getProcessStartTime();long long currentTime = getCurrentTime();if (startTime != -1) {return static_cast<double>(currentTime - startTime) / 10000000.0; // 转换为秒}return -1.0;}
};int main() {ProcessCPUMonitor monitor;// Example: Print process CPU usage every 1 secondfor (int i = 0; i < 5; ++i) {Sleep(1000);std::cout << "Process CPU Usage: " << monitor.getProcessCPUUsage() << "%\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# LINQ

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第22章《LINQ》 二、LINQ to XML 我们可以通过LINQ to XML来创造xml文件 如下示例&#xff0c;我们用LINQ to XML来创造。 <Books><CSharp Time"2019"><book>C# 入门经典</book><…

【Go语言入门:Go语言的数据结构】

文章目录 3.Go语言的数据结构&#xff1a;3.1. 指针3.2. struct&#xff08;结构体&#xff09;3.3. Map(映射,哈希&#xff09; 3.Go语言的数据结构&#xff1a; 简介&#xff1a; 在Go语言中&#xff0c;数据结构体可以分为四种类型&#xff1a;基础类型、聚合类型、引用类型…

uniapp 输入手机号并且正则校验

1.<input input“onInput” :value“phoneNum” type“number” maxlength“11”/> 3. method里面写 onInput(e){ this.phoneNum e.detail.value }, 4.调用接口时候校验正则 if (!/^1[3456789]\d{9}$/.test(this.phoneNum)) {uni.showToast({title: 请输入正确的手机号…

对于c++的总结与思考

笔者觉得好用的学习方法&#xff1a;模板法 1.采用原因&#xff1a;由于刚从c语言面向过程的学习中解脱出来&#xff0c;立即把思路从面向过程转到面向对象肯定不现实&#xff0c;加之全新的复杂语法与操作&#xff0c;着实给新手学习这门语言带来了不小的困难。所以&#xff…

【Linux系统编程】环境变量

介绍 环境变量是一个系统预定义的全局参数&#xff0c;系统自己开辟空间&#xff0c;将它存在于所有的Shell中&#xff0c;具有继承性&#xff0c;可以存储有关shell会话和工作环境的信息。 环境变量不是只有一个&#xff0c;而是一堆&#xff0c;是系统内具有特殊用途的变量。…

【动画视频生成】

转自&#xff1a;机器之心 动画视频生成这几天火了&#xff0c;这次 NUS、字节的新框架不仅效果自然流畅&#xff0c;还在视频保真度方面比其他方法强了一大截。 最近&#xff0c;阿里研究团队构建了一种名为 Animate Anyone 的方法&#xff0c;只需要一张人物照片&#xff0…

数据结构与算法教程,数据结构C语言版教程!(第一部分、数据结构快速入门,数据结构基础详解)二

第一部分、数据结构快速入门&#xff0c;数据结构基础详解 数据结构基础&#xff0c;主要研究数据存储的方式。 本章作为数据结构的入门课程&#xff0c;主要让读者明白&#xff0c;数据结构到底是什么&#xff0c;常用的数据存储结构有哪些&#xff0c;数据结构和算法之间到底…

钉钉机器人接入定时器(钉钉API+XXL-JOB)

钉钉机器人接入定时器&#xff08;钉钉APIXXL-JOB&#xff09; 首先需要创建钉钉内部群 在群设置中找到机器人选项 选择“自定义”机器人 通过Webhook接入自定义服务 创建完成后会生成一个send URL和一个加签码 下面就是干货 代码部分了 DingDingUtil.sendMessageByText(webho…

【Python】ubuntu python>3.9编译安装,及多个Python版本并存的使用方法

【Python】ubuntu python3.9编译安装&#xff0c;及多个Python版本并存的使用方法 1. 安装依赖2. 编译与安装2.1 依赖与源获取2.2 配置2.3 编译2.4 安装2.5 链接动态库 3. 多版本兼容 1. 安装依赖 更新系统软件 在正式开始之前&#xff0c;建议首先检查系统软件是否均为最新&a…

构建高效数据中台:集群规划与搭建的最佳实践指南

架构设计 Rack(机架)配置建议 大数据集群规划 安装细节见配套文档 YARN资源管理平台队列调度策略 Capacity Scheduler 默认配置下,Capacity Scheduler 将尝试保证每个队列在其分配的容量内公平地使用资源。 然而,Hadoop 也支持通过调整队列的权重和使用抢占策略来优化资…

《Spring Cloud学习笔记:微服务保护Sentinel》

Review 解决了服务拆分之后的服务治理问题&#xff1a;Nacos解决了服务治理问题OpenFeign解决了服务之间的远程调用问题网关与前端进行交互&#xff0c;基于网关的过滤器解决了登录校验的问题 流量控制&#xff1a;避免因为突发流量而导致的服务宕机。 隔离和降级&#xff1a…

微信小程序开发系列-04获取用户图像和昵称

这个功能的实现对于我这个新手来说可谓是一波三折。该功能的实现经历了三个“版本”的迭代&#xff0c;我的运气不是很好&#xff0c;从第一个“版本”开始尝试&#xff0c;这篇文章也是记录下这个过程&#xff0c;以便其他新手能快速找到解决方案。 Gen1-getUserInfo 第一个…

android studio导入module

在Android Studio中导入一个Module&#xff08;模块&#xff09;&#xff0c;可以按照以下步骤进行操作&#xff1a; 打开Android Studio&#xff0c;并打开你的项目。在菜单栏中&#xff0c;点击 "File"&#xff08;文件&#xff09;-> "New"&#xf…

音视频学习(二十二)——rtmp发流(tcp方式)

前言 本文主要介绍自研的RtmpStreamSender.dll&#xff0c;rtmp库提供接口接收裸流数据&#xff0c;支持将裸流数据封装为flv格式并通过rtmp协议发流。 关于rtmp协议基础介绍可查看&#xff1a;https://blog.csdn.net/www_dong/article/details/131026072 关于rtmp收流介绍可…

django的gunicorn的异步任务执行

gunicorn 本身是一个WSGI HTTP服务器&#xff0c;用于运行Python的web应用&#xff0c;如Django项目。它并不直接提供执行异步任务的功能。异步任务通常是指那些你想要在web请求之外执行的后台任务&#xff0c;如发送电子邮件、处理长时间运行的计算或与外部API交互等。 在Dja…

可视化云监控/安防监控系统EasyCVR视频管理平台播流失败的原因(端口篇)

安防视频监控EasyCVR平台兼容性强&#xff0c;可支持的接入协议众多&#xff0c;包括国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台能将接入的视频…

C++ list的模拟实现

一 定义节点类 list相当于带头节点的双向链表&#xff0c;我们定义节点时要用类模板参数&#xff0c;同时定义_next、_prev指针和数据_data&#xff0c;使用struct定义节点类&#xff0c;因为节点类要能够被访问&#xff0c;而struct的默认访问权限就是public&#xff08;当然手…

XIAO ESP32S3之物体检测加入视频流

一、前言 由于XIAO ESP32S3开发套件没有显示屏配件&#xff0c;因此加入http视频流功能&#xff0c;可通过浏览器请求ESP32S3上的视频流。 二、思路 1、XIAO ESP32S3启动后通过wifi连接到AP&#xff1b; 2、启动http服务器&#xff0c;注册get_mjpeg处理函数&#xff1b; 3…

GPT Zero 是什么?

from https://openaigptguide.com/gptzero/ 在人工智能技术飞速发展的今天&#xff0c;人们对于文字内容的准确性和可信度要求越来越高。例如在学术研究领域&#xff0c;防止抄袭和造假是非常重要的。而对于普通用户而言&#xff0c;辨别哪些内容是由人工智能生成的&#xff0…

ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

目录 ​专题一 开启大模型 专题二 基于ChatGPT大模型提问框架 专题三 基于ChatGPT大模型的数据清洗 专题四 基于ChatGPT大模型的统计分析 专题五 基于ChatGPT大模型的机器学习 专题六 基于ChatGPT大模型的科研绘图 专题七 基于ChatGPT大模型的GIS应用 专题八 基于基于C…