SignalObjectAndWaitの例(C言語)

説明:

メインの処理とサブの処理が2つのスレッドでなされる。サブの処理は、メインの処理が終了するまでブロックされる。メインの処理が終了すると、排他制御用ミューテックスをシグナル状態にするとともにスレッドオブジェクトの待機を行うために、SignalObjectAndWait関数を実行する。

サンプルコード:

HANDLE hMutex;

/* スレッド用関数 */
DWORD WINAPI DoThread(void *p)
{
	/* 所有権獲得まで待機 */
	WaitForSingleObject(hMutex, INFINITE);

	/* サブ処理 */
	printf("サブ処理開始\n");
	Sleep(1000);
	printf("サブ処理終了\n");

	return(0);
}

int main(int argc, char **argv)
{
	HANDLE hThread;
	DWORD ThreadID;

	hMutex = CreateMutex(NULL, TRUE, NULL);

	/* スレッドを作成 */
	hThread = CreateThread(
		NULL, 0, (LPTHREAD_START_ROUTINE)DoThread,
		NULL, 0, &ThreadID);

	/* メイン処理 */
	printf("メイン処理開始\n");
	Sleep(1000);
	printf("メイン処理終了\n");

	/* スレッドの終了まで待機 */
	SignalObjectAndWait(hMutex, hThread, INFINITE, FALSE);
	
	/* 後処理 */
	CloseHandle(hMutex);
	CloseHandle(hThread);

	return(0);
}

(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。