首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当多个句柄同时发出信号时,WaitForMultipleObjects的行为

当多个句柄同时发出信号时,WaitForMultipleObjects 函数的行为取决于它的参数设置。在这种情况下,该函数将等待任何一个对象变为已终止状态,并返回已终止对象的索引。这种方式被称为“随机赢者”模式。

以下是 WaitForMultipleObjects 函数的一个示例:

代码语言:c
复制
#include<windows.h>
#include<stdio.h>

int main()
{
    HANDLE hMutex1 = CreateMutex(NULL, FALSE, TEXT("Mutex1"));
    HANDLE hMutex2 = CreateMutex(NULL, FALSE, TEXT("Mutex2"));
    HANDLE hMutex3 = CreateMutex(NULL, FALSE, TEXT("Mutex3"));

    // 等待多个对象,直到其中一个变为已终止状态
    DWORD dwWaitResult = WaitForMultipleObjects(3, 
        hMutexArray, FALSE, INFINITE);

    switch (dwWaitResult)
    {
        case WAIT_OBJECT_0:
            // hMutex1已终止
            break;
        case WAIT_OBJECT_0 + 1:
            // hMutex2已终止
            break;
        case WAIT_OBJECT_0 + 2:
            // hMutex3已终止
            break;
        default:
            printf("WaitForMultipleObjects 失败。\n");
            break;
    }

    // 关闭句柄
    CloseHandle(hMutex1);
    CloseHandle(hMutex2);
    CloseHandle(hMutex3);

    return 0;
}

在这个示例中,我们创建了三个互斥量,并使用 WaitForMultipleObjects 函数等待它们。当其中一个互斥量变为已终止状态时,函数将返回该互斥量的索引。

需要注意的是,WaitForMultipleObjects 函数的参数设置决定了它的行为。例如,如果将 bWaitAll 参数设置为 TRUE,则该函数将等待所有对象变为已终止状态,并返回 WAIT_OBJECT_0WAIT_OBJECT_0 + nCount - 1 之间的值之一。如果将 dwMilliseconds 参数设置为一个非零值,则该函数将等待指定的毫秒数,如果超时则返回 WAIT_TIMEOUT

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券