Windows下用C语言获取进程cpu使用率,内存使用,IO情况

Windows下用C语言获取进程cpu使用率 Windows下用C语言获取进程CPU使用率,内存使用,IO情况。 可以准确的获取当前进程的CPU使用率。 立即下载

ProcessState.h

#ifndef PROCESS_STAT_H
#define PROCESS_STAT_H
 
#ifdef __cplusplus
extern “C” {
#endif
 
typedef long long int64_t;
typedef unsigned long long uint64_t;
 
/// 获取当前进程的cpu使用率,返回-1失败
int get_cpu_usage();
 
/// 获取当前进程内存和虚拟内存使用量,返回-1失败,0成功
int get_memory_usage(uint64_t* mem, uint64_t* vmem);
 
/// 获取当前进程总共读和写的IO字节数,返回-1失败,0成功
int get_io_bytes(uint64_t* read_bytes, uint64_t* write_bytes);
 
#ifdef __cplusplus
}
#endif
 
#endif/*PROCESS_STAT_H*/


ProcessState.cpp

/**
* 需要连接到psapi.lib
*/

#include <windows.h>  
#include <psapi.h>  
#include <assert.h>  
#include "processstate.h"

#pragma   comment(lib,"psapi.lib")

/// 时间转换  
static uint64_t file_time_2_utc(const FILETIME* ftime)  
{  
    LARGE_INTEGER li;  
  
    assert(ftime);  
    li.LowPart = ftime->dwLowDateTime;  
    li.HighPart = ftime->dwHighDateTime;  
    return li.QuadPart;  
}  
  
  
/// 获得CPU的核数  
static int get_processor_number()  
{  
    SYSTEM_INFO info;  
    GetSystemInfo(&info);  
    return (int)info.dwNumberOfProcessors;  
}  
  
  
  
  
int get_cpu_usage()  
{  
    //cpu数量  
    static int processor_count_ = -1;  
    //上一次的时间  
    static int64_t last_time_ = 0;  
    static int64_t last_system_time_ = 0;  
  
  
    FILETIME now;  
    FILETIME creation_time;  
    FILETIME exit_time;  
    FILETIME kernel_time;  
    FILETIME user_time;  
    int64_t system_time;  
    int64_t time;  
    int64_t system_time_delta;  
    int64_t time_delta;  
  
    int cpu = -1;  
  
  
    if(processor_count_ == -1)  
    {  
        processor_count_ = get_processor_number();  
    }  
  
    GetSystemTimeAsFileTime(&now);  
  
    if (!GetProcessTimes(GetCurrentProcess(), &creation_time, &exit_time,  
        &kernel_time, &user_time))  
    {  
        // We don't assert here because in some cases (such as in the Task Manager)  
        // we may call this function on a process that has just exited but we have  
        // not yet received the notification.  
        return -1;  
    }  
    system_time = (file_time_2_utc(&kernel_time) + file_time_2_utc(&user_time))  / processor_count_;  
    time = file_time_2_utc(&now);  
  
    if ((last_system_time_ == 0) || (last_time_ == 0))  
    {  
        // First call, just set the last values.  
        last_system_time_ = system_time;  
        last_time_ = time;  
        return -1;  
    }  
  
    system_time_delta = system_time - last_system_time_;  
    time_delta = time - last_time_;  
  
    assert(time_delta != 0);  
  
    if (time_delta == 0)  
        return -1;  
  
    // We add time_delta / 2 so the result is rounded.  
    cpu = (int)((system_time_delta * 100 + time_delta / 2) / time_delta);  
    last_system_time_ = system_time;  
    last_time_ = time;  
    return cpu;  
}  
  
  
  
int get_memory_usage(uint64_t* mem, uint64_t* vmem)  
{  
    PROCESS_MEMORY_COUNTERS pmc;  
    if(GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)))  
    {  
        if(mem) *mem = pmc.WorkingSetSize;  
        if(vmem) *vmem = pmc.PagefileUsage;  
        return 0;  
    }  
    return -1;  
}  
  
  
  
int get_io_bytes(uint64_t* read_bytes, uint64_t* write_bytes)  
{  
    IO_COUNTERS io_counter;  
    if(GetProcessIoCounters(GetCurrentProcess(), &io_counter))  
    {  
        if(read_bytes) *read_bytes = io_counter.ReadTransferCount;  
        if(write_bytes) *write_bytes = io_counter.WriteTransferCount;  
        return 0;  
    }  
    return -1;  
}  

  

main.cpp

// main.cpp

#include "ProcessState.h"
#include <stdio.h>  
#include <Windows.h> 

char* SizeFormat(uint64_t size, char *temp){
	if(temp==0)
		return 0;
	if(size<1024)
		sprintf(temp,"%d byte", size);
	else if(size<1024*1024)
		sprintf(temp,"%d KB",size/1024 );
	else if(size<1024*1024*1024)
		sprintf(temp,"%d MB",size/1024/1024 ); 
	else if(size<1024*1024*1024*1024)
		sprintf(temp,"%d GB",size/1024/1024/1024 ); 
	else // if(size<1024*1024*1024*1024*1024)
		sprintf(temp,"%d TB",size/1024/1024/1024/1024 );

	return temp;
}
  
int main()   
{   
    int cpu=-1;  
    uint64_t mem=0, vmem=0, r=0, w=0;  
    char temp[64]={0};
    while(1)   
    {  
        cpu = get_cpu_usage();  
        get_memory_usage(&mem, &vmem);  
        get_io_bytes(&r, &w);  
  
        printf("CPU使用率: %u %% \n",cpu);  
        printf("内存使用: %u  \n", SizeFormat(mem, tempsize));  
        printf("虚拟内存使用: %u \n", SizeFormat(vmem, tempsize));  
        printf("总共读: %u  \n", SizeFormat(r, tempsize));  
        printf("总共写: %u  \n", SizeFormat(w, tempsize);   
  
        Sleep(1000);   
    }   
    return 0;   
}  





C++获取特定进程CPU使用率的实现代码 写一个小程序在后台记录每个进程的CPU使用情况,揪出锁屏后占用CPU的进程,于是自己写了一个C++类CPUusage,方便地监视不同进程的CPU占用情况。本人编程还只是个新手,如有问题请多多指教 立即下载

相关推荐

在AVP28335(兼容德州仪器TMS320-28335) 上实现ModbusSlaveRTU-485源码及注释。

今天先把题目先给出来, 在近两天会把源码 (含详细注释 )及部署、测试结果给出来, 希望能给大家帮助。(全免费 我有点缺德,断了别人的一个财路)。

FOOLCODE的专栏 642

C++如何获取特定进程CPU使用率

这篇文章将为大家详细讲解有关C++如何获取特定进程CPU使用率,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。计算原理为调用GetProcessTimes(),与上次调用得到的结果相减得到CPU占用时间,再除以两次调用的时间差,从而得到占用百分比。其中OpenProcess需要的权限为PROCESS_QUERY_LIMITED_INFORMATION,因此没有管理员权限也可以使用。使用方法:初始化: 可以在构造函数中指定pid,也可以用setpid()指定pid。查看CPU

woaitingting1985的博客 5804

ubuntu18.04安装R——无法连接上 dl.google.com:80 (6.6.6.6),连接超时&&E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

安装R的时候,sudo apt update 的时候出现错误: 查资料要修改/etc/apt/sources.list.d/google-chrome.list 文件 原来是: deb http://dl.google.com/linux/chrome/deb/ stable main 改为: deb [arch=amd64] http://dl.google.com/linux/chrom...

许希律的博客 4353

Go语言使用CGO获取Windows的CPU使用率

package main /* #include #include #include double FileTimeToDouble(FILETIME* pFiletime) { return (double)((*pFiletime).dwHighDateTime * 4.294967296E9) + (double)(*pFiletime).dwLowDateTime; } do

JieLinDee的专栏 4132

基于cat12和SPM12进行VBM&SBM数据分析笔记1——数据预处理

基于cat12数据分析基础教程笔记 今年是小编步入研究生生活的第一年,研究方向待定,但主要以磁共振成像为主,以后会不断地总结这方面的知识,涉及MRI扫描,数据分析基础方法理论,软件操作教程,文献阅读笔记总结等等,用来记录我的研究生三年学习过程。编写尽量简洁明了,通俗易懂,本就是小白,也能体会小白的痛。不过这也要谢谢一个人手动@小白(网名),是他教我要把自己所学的写下来,讲出来才能真正的做到输入和输出,查漏补缺。而cat12软件操作是我面临的第一个数据分析的训练,写的可能也不会非常到位,还望各位专业人士指出改

Sophia2023的博客 4万+

科研党必备:Python脚本批量下载DOI文献的保姆级教程(附避坑指南)

本文为科研人员提供了一份详细的Python脚本批量下载DOI文献的教程,涵盖环境配置、核心功能实现、性能优化及常见问题解决。通过自动化脚本,研究者可高效完成文献批量下载,显著提升科研工作效率,特别适合需要处理大量文献的研究团队使用。

weixin_26965807的博客 477

Linux下C/C++实现cpustat(测量CPU利用率)

cpustat是一个转储当前运行任务(即进程或内核线程)的CPU利用率的程序。cpustat用于监视系统中长期存在的进程的活动,例如守护进程、内核线程以及典型的用户进程。

chen1415886044的博客 4598

支付宝H5支付唤醒协议全解析:从alipays://到动态orderSuffix的抓取与拼接

本文深入解析支付宝H5支付唤醒协议,从alipays://协议设计到动态orderSuffix参数的抓取与拼接,详细介绍了支付宝H5支付的底层机制。内容包括协议架构剖析、动态令牌生成与捕获、浏览器兼容性解决方案以及安全机制设计,为开发者提供全面的技术指南和实践建议。

weixin_27972919的博客 3509

Ubuntu/linux c开发(7)进程名称获取进程PID、CPU内存占用

cpu,mem

woaitingting1985的博客 1926

从DBC到ARXML:用RTA-CAR7实现车载通信协议栈自动化生成全流程

本文详细介绍了如何利用ETAS RTA-CAR7工具链,特别是ISOLAR-A和RTA-BSW ConfGen,实现从车载通信DBC文件到AUTOSAR ARXML系统描述文件,再到基础软件(BSW)协议栈代码的自动化生成全流程。该流程通过深度配置、信号路由、PDU复用及规则定制,大幅提升开发效率与一致性,是应对现代汽车电子复杂网络开发的关键实践。

brandy的博客 221

Python爬虫实战:抓取CVE安全漏洞数据库

在网络安全领域,CVE(Common Vulnerabilities and Exposures)是一个非常重要的安全漏洞字典,它为每个安全漏洞提供了唯一的标识符。安全研究人员、开发人员和系统管理员都需要及时了解最新的CVE信息,以便采取相应的防护措施。本文将详细介绍如何使用Python爬虫技术从专业CVE网站抓取漏洞数据,并构建一个完整的CVE信息采集系统。本文详细介绍了如何使用Python爬虫技术从专业CVE网站抓取安全漏洞数据。多种爬虫技术反爬虫策略:User-Agent轮换、代理IP、请求延迟。

2201_76125261的博客 368

Linux C 获取进程的 CPU 和内存数据

Linux C 获取进程的 CPU 和内存数据

myw31415926的专栏 4564

基于STM32L4XX、HAL库的ICP-10111压力传感器驱动程序设计

define ICP10111_CMD_MEAS_ULN 0x7866 // 超低噪声模式。#define ICP10111_CMD_MEAS_LP 0x609C // 低功耗模式。#define ICP10111_CMD_MEAS_LN 0x70DF // 低噪声模式。#define ICP10111_CMD_MEAS_N 0x6825 // 正常模式。ICP10111_MODE_LN, // 低噪声。// 等待测量完成(根据模式不同等待时间不同)

zhusl6688的博客 417

Windows下用C语言获取进程cpu使用率,内存使用,IO情况

process_stat.h的内容如下: C代码   /** @file  * @brief 进程统计信息函数的声明  * @author 张亚霏  * @date 2009/05/03  * @version 0.1  *  */  #ifndef PROCESS_STAT_H  #define PROCESS_STAT_H      #ifdef

jshmzy的专栏 774

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C语言io进程,Windows下用C语言获取进程cpu使用率,内存使用,IO情况

/** @file* @brief 进程统计信息函数的声明* @author 张亚霏* @date 2009/05/03* @version 0.1**/#ifndef PROCESS_STAT_H#define PROCESS_STAT_H#ifdef __cplusplusextern "C" {#endiftypedef long long int64_t;typedef...

weixin_32678995的博客 407

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

c语言占用cpu的程序,Windows下用C语言获取进程cpu使用率,内存使用,IO情况

转自:http://zhangyafeikimi.iteye.com/blog/378658process_stat.h/** @file * @brief 进程统计信息函数的声明 * @author 张亚霏 * @date 2009/05/03 * @version 0.1 * */ #ifndef PROCESS_STAT_H #define PROCESS_STAT_H #ifdef __...

weixin_28920823的博客 1058

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

c语言实现cpu使用率 windows,windows下用c语言获取进程cpu使用率内存使用io情况

Windows 下用 C 语言获取进程 cpu 使用率,内存使用,IO 情况一个项目需要,特地写了这些功能的函数。 process_stat.h 的内容如下: C 代码 1. /** @file 2. * @brief 进程统计信息函数的声明 3. * @author 张亚霏 4. * @date 2009/05/03 5. * @version 0.1 6. * 7. */ 8. #ifndef...

weixin_39588542的博客 885
上一篇: Linux办公
下一篇: FlexPaper+SWFTools 实现仿百度文库及一些小问题
ShadowWalker
博客等级 码龄16年 78粉丝 128原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值