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

bannerAds