关于“50% CPU 占有率”题目的内容扩展

System Idle Process

Windows页面内存管理进程,拥有0级优先。该进程作为单线程运行在每个处理器上,并在系统不处理其他线程的时候反派处理器的时间。有意思的是,它的CPU占有率越大则表示可供分配的CPU资源越多。该进程是系统必须的,不能禁止,但它却又不是系统进程,它允许于后台而且不使用网络。该进程名称为“系统空闲进程”,相应的描述为”处理器空闲时间百分比“。

那么怎么找到它呢?在Windows XP/Vista/7中,打开任务管理器就可以直接看到,在Windows 8/8.1以及Windows 10中,则稍显隐蔽,因此甚至许多人认为已经不存在了……

这里写图片描述

什么是0级优先?

在Windows上,每个进程都有一个优先级,范围从0到31,0为最低优先级,31为最高优先级。当系统在决定进程调度的时候,会优先考虑优先级为31的进程,如果存在则先执行。在执行完该进程后再查找是否还有其他优先级为31的进程,如果有的话则不会调度优先级为0至30的进程。Windows支持6个优先级类:Real-time(实时)、High(高)、Above normal(高于标准)、Normal(标准)、Below normal(低于标准)和Idle(空闲)。在进程中还有线程,线程同样也有相对线程优先级:Time-critical(关键时间)、Heightest(最高,不过没有关键时间优先)、Above normal(高于标准)、Normal(标准)、Below normal(低于标准)、Lowest(最低,同样,也比Idle优先)和Idle(空闲)。开发者不需要设置具体的优先级0-31,Windows会主动将“优先级类”和“相对进程优先级”映射到相应的优先级上。注意,这样映射方式随Windows版本的不同而不同,因此下图只做参考。

这里写图片描述

DWORD

DWORD就是Double Word,每个Word为2个字节的长度,DWORD双字即为4个字节,每个字节是8位,共32位。

那么如何在C++中需要include什么呢?

#include "windows.h"

关于DWORD需要注意的一点是,它虽然表示的是32位无符号整数,但无论对于32位还是64位的Windows操作系统,DWORD都是32位无符号整数。

Sleep()

在C/C++中的Sleep()函数的功能是执行挂起一段时间,和DWORD需要一样的头文件。在Linux中则需要包含unistd.h头文件。

#include<unistd.h>

注意在VC中Sleep的第一个字母是大写的“S”,而在标准C中则是小写。Sleep()需要一个无符号整形,单位是毫秒。而sleep()中则是秒。

GetTickCount()

DWORD GetTickCount(void)从0开始计时,返回自程序启动后的毫秒数(不含系统暂停时间)。其同样需要包含“windows.h”头文件。

Perfmon.exe



为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp

posted @ 2015-04-23 15:01  nomasp  阅读(289)  评论(0编辑  收藏  举报