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占用情况。本人编程还只是个新手,如有问题请多多指教 立即下载

相关推荐

单相变换器的二次纹波分析

1. 单相PWM整流器的二次纹波产生原因   单相变换器的二次纹波产生的原因是功率含有二次脉动分量。设电网电压 us=Vmsin(wt),电网电流IL=Imsin(wt−θ)I_L=I_msin(wt-\theta)IL​=Im​sin(wt−θ)。其中w是电网电压披绿,θ\thetaθ是电流之后电压相位。保证输入功率和输出功率相等,就要保证两者的直流量和交流量对应相等。   uDu_DuD​为 PWM 整流器直流电容电压平均值,IoI_oIo​ 为负载电流平均值 ,uDC^\widehat {u_{DC}

qq_38847810的博客 4974

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

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

woaitingting1985的博客 5805

开关电源环路补偿--开关电源进阶知识补充1

笔记 一 . 做开关电源环路补偿时候为了使得环路更加稳定。 1 .-- > 希望开关电源的相位裕量在45° 以上, 2. – > 希望开关电源的增益裕量在10db 以上 3. – > 希望开关电源增益曲线在过0db 时候以20db /dec 斜率下降(体现1个极点) 4. – > 希望开关电源补偿之后的带宽达到开关频率的是1/5 ~1/10,用以原理开关电源的开关噪音。 左边图示电源瞬态拉载和释放负载的时候输出电压存在明显的振铃,说明这个目前的环路相位裕量(phase m

qq_29776365的博客 1万+

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

从模组到集装箱:手把手拆解一个储能BMS的软硬件架构设计与通信组网

本文深入解析储能BMS的软硬件架构设计与通信组网,从电芯采样到系统集成的全链条技术实现。详细介绍了三级硬件架构(AFE、CMU、BMU)的设计要点,以及软件分层实现中的驱动层、应用层核心算法和通信协议栈。通过实战案例分享CAN网络搭建、调试工具链和系统验证测试经验,为储能系统开发提供实用指导。

weixin_30752699的博客 464

创建动态代理对象bean,并动态注入到spring容器中

使用过Mybatis的同学,应该都知道,我们只需要编写mybatis对应的接口和mapper XML文件即可,并不需要手动编写mapper接口的实现。这里mybatis就用到了JDK动态代理,并且将生成的接口代理对象动态注入到Spring容器中。 这里涉及到几个问题。也许有同学会有疑问,我们直接编写好类,加入@Component等注解不是可以注入了吗?或者在配置类(@Configuration)...

lichuangcsdn的博客 3万+

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

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

chen1415886044的博客 4598

GD32F470实战:如何用EXMC+SDRAM为LVGL打造超大内存池(附完整配置代码)

本文详细介绍了如何利用GD32F470的EXMC接口与SDRAM深度整合,为LVGL构建高性能内存解决方案。通过硬件架构设计、EXMC接口配置、高级内存管理策略及LVGL性能优化技巧,开发者可以突破微控制器内存限制,实现高分辨率显示和复杂动画效果。附完整配置代码,助力嵌入式GUI开发。

rrr55的博客 548

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

cpu,mem

woaitingting1985的博客 1926

Codesys入门-新建工程+任务调用+编译+调试

程序组织单元(Program Organization Unit, POU)由声明区和代码区组成,是用户程序的最小软件单元,它相当于传统编程系统中的块(Block),按功能程序组织单元(POU)可分为函数(FUN)、功能块(FB)、程序(PRG)。:Codesys采用多任务的方式来执行用户程序的“任务”,而每个“任务”分配了不同的执行周期,有些全局变量可能要在不同的POU之间被访问和修改,于是需要对全局变量进行交互同步,也是在任务的“时间对准点”进行的,实例:声明了INT类型,变量名为输入;

刺客 1万+

从工具选型到落地实践:吃透 SAP Fiori Launchpad 配置工具体系

摘要: SAP Fiori Launchpad配置远非简单添加应用和分配角色,涉及技术目录、业务目录、Spaces/Pages等多层管理。官方推荐新工具分工:技术目录用FLPAM维护应用定义,业务目录用FLPCM编排应用组合,Spaces/Pages优化用户体验布局,而传统Groups模式已被标记弃用。这种分层治理模式(定义层-编排层-展示层)能有效解决传输混乱、升级兼容性问题,尤其适合大规模项目实施。关键在于区分技术配置与业务呈现,避免将所有功能堆砌在单一旧工具中。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 103

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

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

myw31415926的专栏 4564

在鸿蒙中使用AVPlayer完成视频的播放【坚果派】

播放的全流程包含:创建AVPlayer,设置播放资源和窗口,设置播放参数(音量/倍速/缩放模式),播放控制(播放/暂停/跳转/停止),重置,销毁资源。5.准备播放:调用prepare(),AVPlayer进入prepared状态,此时可以获取duration,设置缩放模式、音量等。8.退出播放:调用release()销毁实例,AVPlayer进入released状态,退出播放。6.视频播控:播放play(),暂停pause(),跳转seek(),停止stop() 等操作。今天我们来看一下视频如何正常播放。

坚果的博客 4057

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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、付费专栏及课程。

余额充值