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.
Tópicos relacionados