WindowsでWaitForSingleObjectを使用の方法
WaitForSingleObject 関数とは、ひとつのまたは複数のカーネル オブジェクトの状態が変化するまで待つ、Windows の機能です。以下は関数のプロトタイプです。
DWORD WaitForSingleObject( HANDLE hObject, DWORD dwMilliseconds );
パラメータの説明を以下に示します。
`hObject`:待機対象のカーネルオブジェクトのハンドル。
dwMilliseconds:指定等待的时间(以毫秒为单位)。可以使用特定的值来控制等待行为。
戻り値は次の値を取り得る関数実行の結果を示します。
`WAIT_OBJECT_0`:オブジェクトのシグナルが待機に成功した。
待ち時間がタイムアウト
WAIT_FAILED: 待機に失敗しました。無効な引数が渡された、またはその他の理由が考えられます。
スレッドの終了を `WaitForSingleObject` を使用して待機する例は次のとおりです。
#include
#include
DWORD WINAPI MyThreadProc(LPVOID lpParam)
{
// 在这里执行线程的任务
// ...
return 0;
}
int main()
{
HANDLE hThread;
DWORD dwThreadId;
// 创建线程
hThread = CreateThread(
NULL, // 默认安全属性
0, // 默认线程栈大小
MyThreadProc, // 线程函数地址
NULL, // 传递给线程函数的参数
0, // 默认标志
&dwThreadId // 返回线程ID
);
if (hThread == NULL)
{
printf("Failed to create thread\n");
return 1;
}
// 等待线程结束
DWORD dwResult = WaitForSingleObject(hThread, INFINITE);
if (dwResult == WAIT_FAILED)
{
printf("WaitForSingleObject failed\n");
return 1;
}
printf("Thread finished\n");
// 关闭线程句柄
CloseHandle(hThread);
return 0;
}
このサンプルでは、新しいスレッドの作成に `CreateThread` 関数を使用しています。次に、スレッドが終了するまで `WaitForSingleObject` 関数を使用して待機し、`WaitForSingleObject` が成功を返します。最後にスレッドハンドルを閉じます。
WaitForSingleObject関数は`dwMilliseconds`というパラメータを持ち、待機時間を指定できます。ここでは、マクロ`INFINITE`を使用して無限待機を指定しています。つまり、オブジェクトがシグナルするまでずっと待機します。また、特定の待機時間(例えば1000は1秒の待機)を設定することもできます。