版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、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 P
2、ROCESS_STAT_H 9. #define PROCESS_STAT_H 10. 11. 12. #ifdef _cplusplus 13. extern "C" 14. #endif 15. 16. typedef long long
3、; int64_t; 17. typedef unsigned long long uint64_t; 18. 19. 20. / 获取当前进程的cpu使用率,返回-1失败 21. int
4、;get_cpu_usage(); 22. 23. 24. / 获取当前进程内存和虚拟内存使用量,返回-1失败,0成功 25. int get_memory_usage(uint64_t* mem, uint64_t* vmem); 26. 27. 28.
5、; / 获取当前进程总共读和写的IO字节数,返回-1失败,0成功 29. int get_io_bytes(uint64_t* read_bytes, uint64_t* write_bytes); 30. 31. 32. 33. 34. #ifdef _cplusplus 35.
6、36. #endif 37. 38. #endif/*PROCESS_STAT_H*/ process_stat_win.c的内容如下: C代码 1. /* file 2. * brief 进程统计信息函数的实现 3. * author 张亚霏 4. * date 2009/05/03 5. * version 0.1 6. * 7. *
7、;部分代码来自MSDN的例子 8. * 部分代码来自google chromium项目 9. * 10. * 需要连接到psapi.lib 11. */ 12. 13. 14. #include <windows.h> 15. #include <psapi.h> 16. #include <assert.h> 17. #in
8、clude "process_stat.h" 18. 19. 20. 21. / 时间转换 22. static uint64_t (const * ftime) 23. 24. LARGE_INTEGER li; 25. 26.
9、; assert(ftime); 27. li.LowPart = ftime->dwLowDateTime; 28. li.HighPart = ftime->dwHighDateTime; 29. return li.QuadPart; 30. 31. &
10、#160; 32. 33. / 获得CPU的核数 34. static int get_processor_number() 35. 36. SYSTEM_INFO info; 37. GetSystemInfo(&info); 38. return
11、(int)info.dwNumberOfProcessors; 39. 40. 41. 42. 43. 44. int get_cpu_usage() 45. 46. /cpu数量 47. static int processor_count_ =
12、60;-1; 48. /上一次的时间 49. static int64_t last_time_ = 0; 50. static int64_t last_system_time_ = 0; 51. 52. 53.
13、 now; 54. creation_time; 55. exit_time; 56. kernel_time; 57. user_time; 58. int64_t&
14、#160;system_time; 59. int64_t time; 60. int64_t system_time_delta; 61. int64_t time_delta; 62. 63. int cpu = -1;
15、 64. 65. 66. if(processor_count_ = -1) 67. 68. processor_count_ = get_processor_number(); 69.
16、60; 70. 71. GetSystemTimeAs(&now); 72. 73. if (!GetProcessTimes(GetCurrentProcess(), &creation_time, &exit_time, 74. &kern
17、el_time, &user_time) 75. 76. / We don't assert here because in some cases (such as in the Task 77.
18、;78. Manager) 79. / we may call this function on a process that has just exited but 80. 81. we have 82.
19、60; / not yet received the notification. 83. return -1; 84. 85. system_time = (&kernel_time) + (&am
20、p;user_time) 86. 87. / 88. processor_count_; 89. time = (&now); 90. 91. if (last_system_time_ = 0)
21、60;| (last_time_ = 0) 92. 93. / First call, just set the last values. 94. last_system_time_
22、;= system_time; 95. last_time_ = time; 96. return -1; 97. 98. 99. system_time_d
23、elta = system_time - last_system_time_; 100. time_delta = time - last_time_; 101. 102. assert(time_delta != 0); 103. 104.
24、;if (time_delta = 0) 105. return -1; 106. 107. / We add time_delta / 2 so the result is rounded. 108.
25、; cpu = (int)(system_time_delta * 100 + time_delta / 2) / time_delta); 109. last_system_time_ = system_time; 110. last_time_ = time; 111.
26、 return cpu; 112. 113. 114. 115. 116. int get_memory_usage(uint64_t* mem, uint64_t* vmem) 117. 118. PROCESS_MEMORY_COUNTERS pmc; 1
27、19. if(GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc) 120. 121. if(mem) *mem = pmc.WorkingSetSize; 122.
28、 if(vmem) *vmem = pmc.Page; 123. return 0; 124. 125. return -1; 126. 127. 128.
29、160;129. 130. int get_io_bytes(uint64_t* read_bytes, uint64_t* write_bytes) 131. 132. IO_COUNTERS io_counter; 133. if(GetProcessIoCounters(GetCurrentProcess(), &io_counter)
30、 134. 135. if(read_bytes) *read_bytes = io_counter.ReadTransferCount; 136. if(write_bytes) *write_bytes = io_counter
31、.WriteTransferCount; 137. return 0; 138. 139. return -1; 140. 可以这样使用: C代码 1. /* file 2. * brief 进程统计信
32、息函数的测试 3. * author 张亚霏 4. * date 2009/05/03 5. * version 0.1 6. * 7. */ 8. 9. #include "process_stat.h" 10. #include <stdio.h> 11. #include <Windows.h>
33、12. 13. int main() 14. 15. while(1) 16. 17. int cpu; 18. uint64_t mem, vmem, r, w; 19. 20. 21.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消费电子铝型材及加工项目可行性研究报告
- 二零二五年度建筑劳务分包及项目管理服务协议3篇
- 显示用载板玻璃建议书可行性研究报告备案
- 运动地板项目可行性研究报告申请备案
- 工业互联网产业园项目初步设计
- 中国公务机产业发展环境透析、市场全景评估及发展趋势预测报告(智研咨询)
- 智研咨询发布:中国航运行业市场现状、发展概况、未来前景分析报告
- 钛合金泵阀建设项目可行性研究报告申请立项备案
- 深圳某电子商务平台项目可行性研究报告
- 智能控制设备生产基地项目申请可行性研究报告
- 安置房项目二次结构砖砌体工程专项施工方案培训资料
- SB/T 10756-2012泡菜
- GB/T 20492-2006锌-5%铝-混合稀土合金镀层钢丝、钢绞线
- 公司变更评审表
- 医院输血质量管理考核标准
- 七年级语文上册:15、《古代诗歌四首》教案
- 自由战争-简体素材表
- 气道评估与处理课件
- 脑血管病的介入诊疗课件
- 新概念第三册课文60全(打印版)
- 四年级硬笔书法教案教学设计共16课
评论
0/150
提交评论