リファレンス(Reference)





CreateThread


SYNTAX HANDLE CreateThread( LPSECURITY_ATTRIBUTES Lpthreadattributes, // Thread の取得属性 ( NULL で Default ) DWORD dwStackSize, // Stack の予約サイズ (0 で プライマリスレッドと同じサイズ ) LPTHREAD_START_ROUTINE lpStartAddress, // ThreadFunc の関数 LPVOID lpParameter, // ThreadFunc にわたすパラメータ DWORD dwCreationFlags, // flag // CREATE_SUSPENDED : ResumeThread が呼ばれるまで待機 // 0 : 即時に実行 LPDWORD lpThreadId // 識別 id がセットされる ( 不要ならば NULL にする ) ) DESC Thread を生成して Thread の識別子である HANDLE をかえす
HANDLE trd[2]; struct ThreadArg { int i; }; ThreadArg arg[2]; // Thread を 2個つくる for( int i=0; i<2; i++ ){ trd[i] = CreateThread( 0, 0, (LPTHREAD_START_ROUTINE)funcTrd, &(arg[i]), 0, 0 ); }



WaitForSingleObject


SYNTAX DWORD WaitForSingleObject(HANDLE h, DWORD msec ); DESC ハンドルで指定したオブジェクトを待機する。 ハンドルに Thread を指定した場合はスレッドが終了するというイベントをまつ。 RET WAIT_OBJECT_0 : シグナル状態になった WAIT_TIMEOUT : タイムアウトによって戻ってきた WAIT_ABANDONED: 指定したオブジェクトは既に別スレッドが破棄している WAIT_FAILED : 関数が失敗 TIP // Thread 完了まち if( WaitForSingleObject( hEvent, INFINITE ) == WAIT_OBJECT_0 ) { // 完了 }
WaitForSingleObject( 2, trd, 1, INFINITE );



GetCurrentThread


SYNTAX HANDLE GetCurrentThread(); DESC 現在のスレッドの疑似ハンドルが返る 現在の Thread のパラメータを変更する際に便利.


GetCurrentThreadId


SYNTAX DWORD GetCurrentThreadId(); DESC 呼び出し側スレッドのスレッド識別子を返す


Sleep


SYNTAX void Sleep( DWORD msec ); DESC 指定時間 Thread を休止させる TIP 0 を指定すると 同じ Priority の 他の Thread に制御をゆずる ( CPU 時間の割り当てがされる ) なければ, そのまま処理が継続される


ResumeThread


SYNTAX DWORD ResumeThread( HANDLE hThread // スレッドのハンドル ); DESC スレッドを再実行させる。 スレッドには SuspendCount(中断)カウントがあり 1 減らす SuspendCount が 0 になると、スレッドの実行が再開される


SuspendThread


SYNTAX SuspendThread( HANDLE ) DESC 指定したスレッドを停止させる。 停止したスレッドはCPU時間が割り当てられなくなる。 WARNING 自分自身で自発的に止める場合は Sleep() を利用する。


ExitThread


SYNTAX ExitThread( DWORD exitcode ) DESC スレッドを終了させる。 終了したいスレッド自身からコールする。 外部から殺すには TerminateThread() を使う 指定した終了コードは外部から GetExitCodeThread() で取得できる。


TerminateThread


SYNTAX TerminateThread( HANDLE, DWORD exitcode ) DESC 指定したスレッドを終了させる。


GetExitCodeThread


SYNTAX BOOL GetExitCodeThread( HANDLE hThread, // スレッドのハンドル LPDWORD lpExitCode // 終了ステータス ); RETVAL 0 : FAIL !0 : OK STILL_ACTIVE : 実行中 DESC 別スレッドから指定したスレッドが終了したか調べる thread::getExitCode() で利用されている
// 終了待ちをする while ( 1 ) { GetExitCodeThread( trd, &ret ); if ( ret == STILL_ACTIVE ){ printf("still working\n") Sleep(0); } else { break; } }