■ 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;
}
}