/* スレッドが終了するまで待つ */
do{
Sleep(500);
GetExitCodeThread(hThread, &dwExitCode);
}while(dwExitCode == STILL_ACTIVE){
|
CRITICAL_SECTION cs;
処理A()
{
EnterCriticalSection(&cs);
処理;
LeaveCriticalSection(&cs);
}
処理B()
{
EnterCriticalSection(&cs);
処理;
LeaveCriticalSection(&cs);
}
スレッドA()
{
処理A() ← (1) 処理Aを実行開始
}
スレッドB()
{
処理B() ← (2) スレッドAが処理Aを実行中に処理Bを実行開始
}
スレッドAが処理Aの実行を開始した直後にスレッドBが処理Bを実行
した場合,スレッドAが処理Aを終了するまで,スレッドBは待ち状態
になる.
|
処理()
{
__try{
EnterCriticalSection(&cs);
逐次再実行可能な処理A(再入不可)
if(エラー){
__leave;
}
逐次再実行可能な処理B(再入不可)
}
__finally{
LeaveCriticalSection(&cs);
}
}
|
| BOOL SetThreadPriority(HANDLE hThread, int iPriority) |
|
指定されたスレッドに対する優先順位値を設定する 引数 HANDLE hThread ... スレッドを識別するハンドル THREAD_SET_INFORMATIONアクセス権が必要 int iPriority ... スレッドの優先順位レベル THREAD_PRIORITY_IDLE ... IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASS プロセスに対しては基本優先順位レベルが1であることを示し, REALTIME_PRIORITY_CLASSのプロセスに対しては基本優先順位レベルが16であることを示す THREAD_PRIORITY_LOWEST ... 優先順位クラスに対する標準の優先順位よりも2ポイント低い THREAD_PRIORITY_BELOW_NORMAL ... 優先順位クラスに対する標準の優先順位よりも1ポイント低い THREAD_PRIORITY_NORMAL ... 優先順位クラスに対する標準の優先順位 THREAD_PRIORITY_ABOVE_NORMAL ... 優先順位クラスに対する標準の優先順位よりも1ポイント高い THREAD_PRIORITY_HIGHEST ... 優先順位クラスに対する標準の優先順位よりも2ポイント高い THREAD_PRIORITY_TIME_CRITICAL ... IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASSのプロセスに対しては基本優先順位レベルが15であることを示し, REALTIME_PRIORITY_CLASSのプロセスに対しては基本優先順位 引数 正常終了 TRUE 異常終了 FALSE |
|
int GetThreadPriority(HANDLE hThread) |
|
指定されたスレッドに対する優先順位値を取得する 引数 HANDLE hThread スレッドを識別するハンドル THREAD_SET_INFORMATIONアクセス権が必要 引数 正常終了 スレッドの優先順位(SetThreadPriority を参照) 異常終了 THREAD_PRIORITY_ERROR_RETURN |