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秒の待機)を設定することもできます。