ではスレッドの副スレッドを2つ作り、それぞれの優先順位を変えてみましょう。
// スレッドを作成する hThread1=CreateThread(NULL, 0, fncThread1, 0, 0, &dThreadID1); hThread2=CreateThread(NULL, 0, fncThread2, 0, 0, &dThreadID2); //プリオリティの設定 SetThreadPriority(hThread1, THREAD_PRIORITY_HIGHEST); SetThreadPriority(hThread2, THREAD_PRIORITY_LOWEST);
CreateThread 関数でスレッドを作成したあと、
SetThreadPriority 関数にスレッドのハンドルを指定して優先順位を変更します。
fncThread1 関数は標準よりも高めに、fncThread2 関数は低めに設定します。
それぞれの関数内での処理はインクリメントだけなので割愛します。
では以上を踏まえたソースを実行してみましょう。
優先度の高いTHREAD_PRIORITY_HIGHEST のスレッドはメインスレッドの2倍より少し高い?くらいでしょうか。
一方の優先度の低いTHREAD_PRIORITY_LOWEST のスレッドでは、スレッドが作成されてから
一瞬だけインクリメントされますが、他のスレッドによりCPUが目一杯使われていて
余裕がない状態では、動作しなくなるっぽいです。
また、これはあくまでプロセス内での相対的な優位性なので、
実行されているプロセスの優先順位クラスににも左右されます。
■BOOL SetThreadPriority( HANDLE hThread, int nPriority );
・指定されたスレッドの相対優先順位値を設定します
第一引数 hThread には、スレッドの相対優先順位値を指定します
第二引数 nPriority には、初期のスタックサイズを指定します
nPriorityのパラメータ
THREAD_PRIORITY_TIME_CRITICAL・・・・基本優先順位レベル15?
THREAD_PRIORITY_HIGHEST・・・・・・・・・相対優先順位値+2
THREAD_PRIORITY_ABOVE_NORMAL・・相対優先順位値+1
THREAD_PRIORITY_NORMAL・・・・・・・・・スレッド標準の相対優先順位値
THREAD_PRIORITY_BELOW_NORMAL・・相対優先順位値-1
THREAD_PRIORITY_LOWEST・・・・・・・・・相対優先順位値-2
THREAD_PRIORITY_IDLE・・・・・・・・・・・・・基本優先順位レベル1?
戻り値 成功なら0 以外の値が、失敗なら0 が返ります。
■int GetThreadPriority( HANDLE hThread );
・指定されたスレッドの相対優先順位値を取得します
第一引数 hThread には、スレッドのハンドルを指定します
戻り値 成功なら指定したスレッドの相対優先順位値が、失敗ならTHREAD_PRIORITY_ERROR_RETURN が返ります
■ソースの表示■
2005/7/9