Objetos de evento (sincronização)
Um objeto de evento é um objeto de sincronização cujo estado pode ser explicitamente definido como sinalizado usando a função SetEvent. A seguir estão os dois tipos de objeto de evento.
Objeto | Descrição |
---|---|
Evento de redefinição manual | Um objeto de evento cujo estado permanece sinalizado até ser redefinido explicitamente para não atribuído pela função ResetEvent. Embora seja sinalizado, qualquer número de threads de espera ou threads que especificam posteriormente o mesmo objeto de evento em uma das funções de espera , pode ser liberado. |
Evento de redefinição automática | Um objeto de evento cujo estado permanece sinalizado até que um único thread de espera seja liberado, momento em que o sistema define automaticamente o estado como não atribuído. Se nenhum thread estiver aguardando, o estado do objeto de evento permanecerá sinalizado. Se mais de um thread estiver aguardando, um thread de espera será selecionado. Não suponha uma ordem FIFO (primeiro a entrar e sair). Eventos externos, como APCs no modo kernel, podem alterar a ordem de espera. |
O objeto de evento é útil para enviar um sinal para um thread indicando que ocorreu um evento específico. Por exemplo, em entrada e saída sobrepostas, o sistema define um objeto de evento especificado para o estado sinalizado quando a operação sobreposta é concluída. Um único thread pode especificar diferentes objetos de evento em várias operações sobrepostas simultâneas e, em seguida, usar uma das funções de espera vários objetos aguardar o estado de qualquer um dos objetos de evento ser sinalizado.
Um thread usa a função CreateEvent ou CreateEventEx para criar um objeto de evento. O thread de criação especifica o estado inicial do objeto e se ele é um objeto de evento de redefinição manual ou de redefinição automática. O thread de criação também pode especificar um nome para o objeto de evento. Threads em outros processos podem abrir um identificador para um objeto de evento existente especificando seu nome em uma chamada para a função OpenEvent. Para obter informações adicionais sobre nomes para objetos mutex, evento, semáforo e temporizador, consulte de Sincronização de Interprocessos.
Tópicos relacionados