八宝书库 > 文学其他电子书 > 深入浅出MFC第2版(PDF格式) >

第20部分

深入浅出MFC第2版(PDF格式)-第20部分

小说: 深入浅出MFC第2版(PDF格式) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的