しかし、本来は待機関数を使うべきです。
ここでは、最も簡単な待機のプログラムを作ってみましょう。
DWORD WaitForSingleObject( HANDLE hHandle, // オブジェクトのハンドル DWORD dwMilliseconds // タイムアウト時間 );hHandleには、オブジェクトのハンドルを指定します。
dwMillisecondsには、タイムアウト時間を指定します。
これに、INFINITEを指定するとオブジェクトがシグナル状態になるまで待機します。
CreateThread関数はスレッドハンドルを返すので、これを第1引数に指定し、第2引数をINFINITEにすると、スレッドが終了するまで、この関数は待機します。
/* mult03.c */ #include <stdio.h> #include <windows.h> #include <process.h> unsigned __stdcall mythread(void *); int main() { int i; HANDLE hTh; DWORD thID; hTh = (HANDLE)_beginthreadex(NULL, 0, mythread, NULL, 0, &thID); if (hTh == 0) { printf("スレッド作成失敗\n"); return -1; } for (i = 0; i < 10; i++) printf("Main [%d]\n", i); WaitForSingleObject(hTh, INFINITE); CloseHandle(hTh); return 0; } unsigned __stdcall mythread(void *lpx) { int i; for (i = 0; i < 20; i++) printf("子スレッド[%d]\n", i); printf("子スレッド終了!\n"); return 0; }main関数のWaitForSingleObject関数で、子スレッドが終了するまで待機します。 シグナル状態になるとreturnして、main関数が終了します。
子スレッドが終了するまで、親は待機している様子がわかります。
Update May/11/2004 By Y.Kumei