Partilhar via


Objetos de evento (sincronização)

Um objeto de evento é um objeto de sincronização cujo estado pode ser definido explicitamente como sinalizado pelo uso da 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é que seja 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 (first-in e first-out). 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 objetos de evento diferentes em várias operações simultâneas sobrepostas e, em seguida, usar uma das funções de espera de vários objetos para 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. Os 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 Sincronização entre processos.

Usando objetos de evento