Função WaitForMultipleObjects (synchapi.h)
Aguarda até que um ou todos os objetos especificados estejam no estado sinalizado ou o intervalo de tempo limite decorrido.
Para inserir um estado de espera alertável, use a função WaitForMultipleObjectsEx .
Sintaxe
DWORD WaitForMultipleObjects(
[in] DWORD nCount,
[in] const HANDLE *lpHandles,
[in] BOOL bWaitAll,
[in] DWORD dwMilliseconds
);
Parâmetros
[in] nCount
O número de identificadores de objeto na matriz apontada por lpHandles. O número máximo de identificadores de objeto é MAXIMUM_WAIT_OBJECTS. Esse parâmetro não pode ser zero.
[in] lpHandles
Uma matriz de identificadores de objeto. Para obter uma lista dos tipos de objeto cujos identificadores podem ser especificados, consulte a seção Comentários a seguir. A matriz pode conter identificadores para objetos de diferentes tipos. Ele pode não conter várias cópias do mesmo identificador.
Se um desses identificadores for fechado enquanto a espera ainda estiver pendente, o comportamento da função será indefinido.
Os identificadores devem ter o direito de acesso SYNCHRONIZE . Para obter mais informações, consulte Direitos de Acesso Padrão.
[in] bWaitAll
Se esse parâmetro for TRUE, a função retornará quando o estado de todos os objetos na matriz lpHandles for sinalizado. Se FALSE, a função retornará quando o estado de qualquer um dos objetos for definido como sinalizado. No último caso, o valor retornado indica o objeto cujo estado causou o retorno da função.
[in] dwMilliseconds
O intervalo de tempo limite em milissegundos. Se um valor diferente de zero for especificado, a função aguardará até que os objetos especificados sejam sinalizados ou o intervalo decorrido. Se dwMilliseconds for zero, a função não inserirá um estado de espera se os objetos especificados não forem sinalizados; ele sempre retorna imediatamente. Se dwMilliseconds for INFINITE, a função retornará somente quando os objetos especificados forem sinalizados.
Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 e Windows Server 2008 R2: o valor dwMilliseconds inclui o tempo gasto em estados de baixa potência. Por exemplo, o tempo limite continua em contagem regressiva enquanto o computador está adormecido.
Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 e Windows Server 2016: o valor dwMilliseconds não inclui o tempo gasto em estados de baixa potência. Por exemplo, o tempo limite não continua em contagem regressiva enquanto o computador está adormecido.
Retornar valor
Se a função for bem-sucedida, o valor retornado indicará o evento que causou o retorno da função. Pode ser um dos seguintes valores. (Observe que WAIT_OBJECT_0 é definido como 0 e WAIT_ABANDONED_0 é definido como 0x00000080L.)
Valor/código retornado | Descrição |
---|---|
|
Se bWaitAll for TRUE, um valor retornado dentro do intervalo especificado indicará que o estado de todos os objetos especificados será sinalizado.
Se bWaitAll for FALSE, o valor retornado menos WAIT_OBJECT_0 indicará o índice de matriz lpHandles do objeto que atendeu à espera. Se mais de um objeto tiver sido sinalizado durante a chamada, esse será o índice de matriz do objeto sinalizado com o menor valor de índice de todos os objetos sinalizados. |
|
Se bWaitAll for TRUE, um valor retornado dentro do intervalo especificado indicará que o estado de todos os objetos especificados é sinalizado e pelo menos um dos objetos é um objeto mutex abandonado.
Se bWaitAll for FALSE, o valor retornado menos WAIT_ABANDONED_0 indicará o índice de matriz lpHandles de um objeto mutex abandonado que atendeu à espera. A propriedade do objeto mutex é concedida ao thread de chamada e o mutex é definido como não atribuído. Se um mutex estava protegendo informações de estado persistente, você deve marcar-lo para consistência. |
|
O intervalo de tempo limite decorrido e as condições especificadas pelo parâmetro bWaitAll não são atendidas. |
|
A função falhou. Para obter informações de erro estendidas, chame GetLastError. |
Comentários
A função WaitForMultipleObjects determina se os critérios de espera foram atendidos. Se os critérios não tiverem sido atendidos, o thread de chamada entrará no estado de espera até que as condições dos critérios de espera sejam atendidas ou o intervalo de tempo limite decorrido.
Quando bWaitAll for TRUE, a operação de espera da função será concluída somente quando os estados de todos os objetos tiverem sido definidos como sinalizados. A função não modifica os estados dos objetos especificados até que os estados de todos os objetos tenham sido definidos como sinalizados. Por exemplo, um mutex pode ser sinalizado, mas o thread não obtém a propriedade até que os estados dos outros objetos também sejam definidos como sinalizados. Enquanto isso, algum outro thread pode obter a propriedade do mutex, definindo assim seu estado como não atribuído.
Quando bWaitAll é FALSE, essa função verifica os identificadores na matriz para começar com o índice 0, até que um dos objetos seja sinalizado. Se vários objetos forem sinalizados, a função retornará o índice do primeiro identificador na matriz cujo objeto foi sinalizado.
A função modifica o estado de alguns tipos de objetos de sincronização. A modificação ocorre apenas para o objeto ou objetos cujo estado sinalizado fez com que a função retornasse. Por exemplo, a contagem de um objeto semáforo é reduzida em um. Para obter mais informações, consulte a documentação dos objetos de sincronização individuais.
Para aguardar mais de MAXIMUM_WAIT_OBJECTS identificadores, use um dos seguintes métodos:
- Crie um thread para aguardar MAXIMUM_WAIT_OBJECTS identificadores e aguarde esse thread mais as outras alças. Use essa técnica para dividir os identificadores em grupos de MAXIMUM_WAIT_OBJECTS.
- Chame RegisterWaitForSingleObject ou SetThreadpoolWait para aguardar em cada identificador. O pool de threads aguarda com eficiência nos identificadores e atribui um thread de trabalho depois que o objeto é sinalizado ou o intervalo de tempo limite expira.
- Alterar notificação
- Entrada do console
- Evento
- Notificação de recurso de memória
- Mutex
- Processar
- Sinal
- Thread
- Temporizador de espera
Exemplos
Para obter um exemplo, consulte Aguardando vários objetos.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [aplicativos da área de trabalho | aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | synchapi.h (inclua Windows.h) |
Biblioteca | Kernel32.lib |
DLL | Kernel32.dll |