深入浅出MFC第2版(PDF格式)-第20部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
定, 系统预设给的是 除非父进程是
IDLE PRIORIT Y CLASS IDLE PRIORIT Y CLASS
_ _ _ _
(那么子进程也会是 )。
等级 代码 优先权值
idle IDLE_PRIORITY_CLASS 4
9 7
normal NORMAL_PRIORITY_CLASS (前景)或 (背景)
high HIGH_PRIORITY_CLASS 13
realtime REALTIME_PRIORITY_CLASS 24
图 1…7 Win32 执 行 线 程 的优先权等级划分
■ 〃idle〃 CPU
等级只有在 时间将被浪费掉时(也就是前一节所说的空闲时间)
才执行。此等级最适合于系统监视软件,或屏幕保护软件。
■ 〃normal〃 〃normal〃
是预设等级。系统可以动态改变优先权,但只限于 等级。
9 7
当进程变成前景,执行线程优先权提升为 ,当进程变成背景,优先权降低为 。
■ 〃high〃 Ctrl+Esc
等级是为了立即反应的需要,例如使用者按下 时立刻把工作管
理器(task manager )带出场。
■ 〃realtime〃
等级几乎不会被一般应用程序使用。就连系统中控制鼠标、键盘、
48
…………………………………………………………Page 111……………………………………………………………
磁盘状态重新扫描、Ctrl+Alt+Del 等的执行线程都比〃realtime〃 优先权还低。这
种等级使用在「如果不在某个时间范围内被执行的话,资料就要遗失」的情况。
这个等级一定得在正确评估之下使用之,如果你把这样的等级指定给一般的
(并不会常常被阻塞的)执行线程,多任务环境恐怕会瘫痪,因为这个执行线程有如
此高的优先权,其它执行线程再没有机会被执行。
IDLE NORMAL
上述四种等级,每一个等级又映射到某一范围的优先权值。 _ 最低, _ 次
之,HIGH_ 又次之,REAL TIME_ 最高。在每一个等级之中,你可以使用SetThreadPriority
设定精确的优先权,并且可以稍高或稍低于该等级的正常值(范围是两个点数)。你可
SetThreadPriority
以把 想象是一种微调动作。
SetThreadPriority 的参数 微调幅度
THREAD PRIORITY LOWEST
_ _ …2
THREAD_PRIORITY_BELOW_NORMAL …1
THREAD_PRIORITY_NORMAL 不变
THREAD_PRIORITY_ABOVE_NORMAL +1
THREAD_PRIORITY_HIGHEST +2
除了以上五种微调,另外还可以指定两种微调常数:
SetThreadPriority 的参数 面对任何等级 面对〃realtime〃等级
的调整結果 : 的调整結果 :
THREAD_PRIORITY_IDLE 1 16
THREAD_PRIORITY_TIME_CRITICAL 15 31
这些情况可以以图1…8 作为总结。
49
…………………………………………………………Page 112……………………………………………………………
优先权等级 idle lowest below normal normal above normal highest time critical
idle 1 2 3 4 5 6 15
normal (背景) 1 5 6 7 8 9 15
normal (前景) 1 7 8 9 10 11 15
high 1 11 12 13 14 15 15
realtime 16 22 23 24 25 26 31
图 执行线程优先权
1…8 Win32
多线程程序设计实例
我设计了一个MltiThrd 程序,放在书附盘片的MltiThrd。01 子目录中。这个程序一开始
…2 …1 0 + 1 +2
产生五个执行线程,优先权分别微调 、 、 、 、 ,并且虚悬不执行:
HANDLE _hThread'5'; // global variable
。。。
LONG APIENTRY MainWndProc (HWND hWnd; UINT message;
UINT wParam; LONG lParam)
{
DWORD ThreadID'5';
static DWORD ThreadArg'5' = {HIGHEST_THREAD; // 0x00
ABOVE_AVE_THREAD; // 0x3F
NORMAL_THREAD; // 0x7F
BELOW_AVE_THREAD; // 0xBF
LOWEST_THREAD // 0xFF
}; // 用来调整四方形顏色
。。。
for(i=0; i