Objets d’événements (synchronisation)

Un objet événement est un objet de synchronisation dont l’état peut être explicitement défini sur signalé à l’aide de la fonction SetEvent . Voici les deux types d’objet d’événement.

Object Description
Événement de réinitialisation manuelle Objet d’événement dont l’état reste signalé jusqu’à ce qu’il soit explicitement réinitialisé sur non signé par la fonction ResetEvent . Pendant qu’il est signalé, n’importe quel nombre de threads en attente, ou threads qui spécifient par la suite le même objet d’événement dans l’une des fonctions d’attente, peut être libéré.
Événement de réinitialisation automatique Objet d’événement dont l’état reste signalé jusqu’à ce qu’un seul thread en attente soit libéré, à ce moment-là, le système définit automatiquement l’état sur non signé. Si aucun thread n’attend, l’état de l’objet d’événement reste signalé. Si plusieurs threads sont en attente, un thread en attente est sélectionné. Ne supposez pas une commande FIFO (premier entré, premier sorti). Les événements externes tels que les API en mode noyau peuvent modifier l’ordre d’attente.

 

L’objet événement est utile pour envoyer un signal à un thread indiquant qu’un événement particulier s’est produit. Par exemple, dans les entrées et sorties qui se chevauchent, le système définit un objet d’événement spécifié à l’état signalé lorsque l’opération qui se chevauche est terminée. Un thread unique peut spécifier différents objets d’événements dans plusieurs opérations simultanées qui se chevauchent, puis utiliser l’une des fonctions d’attente à plusieurs objets pour attendre que l’état de l’un des objets d’événement soit signalé.

Un thread utilise la fonction CreateEvent ou CreateEventEx pour créer un objet d’événement. Le thread de création spécifie l’état initial de l’objet et s’il s’agit d’un objet d’événement de réinitialisation manuelle ou de réinitialisation automatique. Le thread de création peut également spécifier un nom pour l’objet d’événement. Les threads d’autres processus peuvent ouvrir un handle à un objet d’événement existant en spécifiant son nom dans un appel à la fonction OpenEvent . Pour plus d’informations sur les noms des objets mutex, event, sémaphore et minuteur, consultez Synchronisation Interprocess.

Utilisation d’objets d’événement