Windows下用C语言获取进程cpu使用率,内存使用,IO情况
2013-05-01 16:29
603 查看
process_stat.h:
process_stat.cpp:
使用方法:
注:需要用到psapi.h和psapi.lib文件。在我的资源里有完整的代码和必需文件的下载:
http://download.csdn.net/detail/yanzhibo/5319906
转载自:http://zhangyafeikimi.iteye.com/blog/378658
/** @file * @brief 进程统计信息函数的声明 * @author 张亚霏 * @date 2009/05/03 * @version 0.1 * */ #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*/
process_stat.cpp:
/** @file * @brief 进程统计信息函数的实现 * @author 张亚霏 * @date 2009/05/03 * @version 0.1 * * 部分代码来自MSDN的例子 * 部分代码来自google chromium项目 * * 需要连接到psapi.lib */ #include <windows.h> #include <psapi.h> #include <assert.h> #include "process_stat.h" /// 时间转换 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; }
使用方法:
/** @file * @brief 进程统计信息函数的测试 * @author 张亚霏 * @date 2009/05/03 * @version 0.1 * */ #include "process_stat.h" #include <stdio.h> #include <Windows.h> int main() { while(1) { int cpu; uint64_t mem, vmem, r, w; cpu = get_cpu_usage(); get_memory_usage(&mem, &vmem); get_io_bytes(&r, &w); printf("CPU使用率: %u\n",cpu); printf("内存使用: %u 字节\n", mem); printf("虚拟内存使用: %u 字节\n", vmem); printf("总共读: %u 字节\n", r); printf("总共写: %u 字节\n", w); Sleep(1000); } return 0; }
注:需要用到psapi.h和psapi.lib文件。在我的资源里有完整的代码和必需文件的下载:
http://download.csdn.net/detail/yanzhibo/5319906
转载自:http://zhangyafeikimi.iteye.com/blog/378658
相关文章推荐
- Windows下用C语言获取进程cpu使用率,内存使用,IO情况
- Windows下用C语言获取进程cpu使用率,内存使用,IO情况
- Windows下用C语言获取进程cpu使用率,内存使用,IO情况
- Windows下用C语言获取进程cpu使用率,内存使用,IO情况
- Windows下用C语言获取进程cpu使用率,内存使用,IO情况
- Windows下用C语言获取进程cpu使用率,内存使用,IO情况
- Windows下用C语言获取进程cpu使用率,内存使用,IO情况
- linux c程序获取cpu使用率及内存使用情况
- C/C++获取Windows系统CPU和内存及硬盘使用情况
- python windows下通过SSH获取linux系统cpu、内存、网络使用情况
- linux c程序获取cpu使用率及内存使用情况关闭
- linux c程序获取cpu使用率及内存使用情况
- 如何获取进程内存使用情况
- C/C++获取Windows系统CPU和内存及硬盘使用情况
- linux 根据 进程名 获取 对应 PID 来 判断 使用 内存情况
- 获取当前进程的CPU使用率和内存使用
- 通过性能计数器(Process)来获取某个进程的CPU使用率、内存使用量、磁盘读写速率
- 获取系统CPU的核数、软件CPU使用数、内存使用情况、IO读写情况
- C/C++获取Windows系统CPU和内存及硬盘使用情况
- linux c程序获取cpu使用率及内存使用情况