Partilhar via


Objetos de evento (sincronização)

Um objeto de evento é um objeto de sincronização cujo estado pode ser explicitamente definido 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é ser explicitamente redefinido para não sinalizado pela funçãoResetEvent. Enquanto é sinalizado, qualquer número de threads de espera, ou threads que subsequentemente especificam 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 sinalizado. Se nenhum thread estiver esperando, o estado do objeto de evento permanecerá sinalizado. Se mais de um thread estiver aguardando, um thread em espera será selecionado. Não assuma uma ordem FIFO (first-in, first-out). Eventos externos, como APCs de modo kernel, podem alterar a ordem de espera.

 

O objeto de evento é útil para enviar um sinal para um thread indicando que um evento específico ocorreu. Por exemplo, na entrada e saída sobrepostas, o sistema define um objeto de evento especificado para o estado sinalizado quando a operação sobreposta for concluída. Um único thread pode especificar objetos de evento diferentes em várias operações sobrepostas simultâneas e, em seguida, usar uma das funções de espera de de vários objetos aguardar o estado de qualquer um dos objetos de evento a ser sinalizado.

Um thread usa o CreateEvent ou função de 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 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 Sincronização entre processos.

Usando objetos de evento