mfc 線程的優先級

知識點:
    線程優先級
    獲取當前線程句柄
    線程優先級設置
    線程優先級變更
    線程優先級獲取
       
1、線程優先級(Thread priority )函數

    簡單的說就是(線程)的優先級越高,那麼就能夠分佔相對多的CPU時間片。   每一個進程都有相應的優先級,優先級決定它什麼時候運行和佔用 CPU 時間。最終的優先級共分32級,是從 0 到 31 的數值,稱爲基本優先級別。
           線程


進程優先級 priority class    標誌    優先級值
idle     (低)    IDLE_PRIORITY_CLASS    4
Below     低於標準    BELOW_NORMAL_PRIORITY_CLASS    此值在2000如下系統不支持
normal  (標準)    NORMAL_PRIORITY_CLASS    9(前臺) 或 7(後臺)
Above     高於標準    ABOVE_NORMAL_PRIORITY_CLASS    此值在2000如下系統不支持
high      (高)    HIGH_PRIORITY_CLASS    13
realtime (實時)    REALTIME_PRIORITY_CLASS    24
 
一個線程建立的時候,會繼承進程的優先級等級。另外線程優先級能夠用SetThreadPriority來進行微調:
    微調範圍orm

    線程優先級等級    標誌    優先級值
   idle      (最低)    THREAD_PRIORITY_IDLE    若是進程優先級爲realtime則調整爲16,其它狀況爲1
   LOWEST  低    THREAD_PRIORITY_LOWEST    -2(在原有基礎上-2)
   BELOW   低於標準    THREAD_PRIORITY_BELOW_NORMAL    -1(在原有基礎上-1)
   NORMAL(標準)    THREAD_PRIORITY_NORMAL    不變(取進程優先級值)
   ABOVE    高於標準    THREAD_PRIORITY_ABOVE_NORMAL    +1(在原有基礎上+1)
   HIGHEST (高)    THREAD_PRIORITY_HIGHEST    +2(在原有基礎上+2)
   CRITICAL(最高)    THREAD_PRIORITY_TIME_CRITICAL    若是進程優先級爲realtime則調整爲31,其它狀況爲15繼承

  
2、獲取當前線程句柄
HANDLE GetCurrentThread(VOID)
//返回當前進句柄
DWORD GetCurrentThreadId(VOID)
//返回當前進程ID值
   一、其它線程函數
BOOL SetThreadPriority 設置一個線程的優先級別
int GetThreadPriority    返回一個線程的 優先級別  
SetThreadPriorityBoost    設置線程是否禁用動態調整優先級功能。
GetThreadPriorityBoost    獲取線程是否禁用了優先級微調功能。進程

3、線程優先級的設置
 BOOL SetThreadPriority
(
 
 HANDLE hThread,// 線程句柄   handle to the thread
  
 int nPriority      // 要設置線程優先級別thread priority levelit

);io


void CDialog_PROCESS::OnBnClickedRadio7()
{
    // TODO: 在此添加控件通知處理程序代碼
    BOOL r=0;
    UpdateData(true);
    switch (m_radio_thread_selNum)
    {
    case 0:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_IDLE); //設置爲 最低
        TRACE("thread=%d,%04x  set priority to THREAD_PRIORITY_IDLE \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 1:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_LOWEST);//設置爲 較低
        TRACE("thread=%d,%04x  set priority to THREAD_PRIORITY_LOWEST \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 2:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_BELOW_NORMAL); //設置爲 低於標準
        TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_BELOW_NORMAL \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 3:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_NORMAL);  //設置爲 標準
        TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_NORMAL \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 4:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL);  //設置爲 高於標準
        TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_ABOVE_NORMAL \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 5:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST);  //設置爲 較高
        TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_HIGHEST \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 6:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);  //設置爲 最高
        TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_TIME_CRITICAL \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    default:
        break;class

    }    
}thread

相關文章
相關標籤/搜索