知識點:
線程優先級
獲取當前線程句柄
線程優先級設置
線程優先級變更
線程優先級獲取
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