Delen via


Gebeurtenisobjecten (synchronisatie)

Een gebeurtenisobject is een synchronisatieobject waarvan de status expliciet kan worden ingesteld op gesignaleerd met behulp van de SetEvent functie. Hier volgen de twee typen gebeurtenisobjecten.

Object Beschrijving
Gebeurtenis handmatig opnieuw instellen Een gebeurtenisobject waarvan de status wordt gesignaleerd totdat het expliciet opnieuw wordt ingesteld op niet-ondertekend door de ResetEvent functie. Hoewel het wordt gesignaleerd, kan een willekeurig aantal wachtende threads of threads die vervolgens hetzelfde gebeurtenisobject opgeven in een van de wachtfuncties, worden vrijgegeven.
Gebeurtenis automatisch opnieuw instellen Een gebeurtenisobject waarvan de status wordt gesignaleerd totdat één wachtthread wordt vrijgegeven, waarna de status automatisch wordt ingesteld op niet-ondertekend. Als er geen threads wachten, blijft de status van het gebeurtenisobject gesignaleerd. Als meer dan één thread wacht, wordt er een wachtende thread geselecteerd. Ga niet uit van een FIFO-volgorde (first-in, first-out). Externe gebeurtenissen, zoals kernelmodus-API's, kunnen de wachtvolgorde wijzigen.

 

Het gebeurtenisobject is handig bij het verzenden van een signaal naar een thread die aangeeft dat een bepaalde gebeurtenis heeft plaatsgevonden. In overlappende invoer en uitvoer stelt het systeem bijvoorbeeld een opgegeven gebeurtenisobject in op de gesignaleerde status wanneer de overlappende bewerking is voltooid. Een enkele thread kan verschillende gebeurtenisobjecten opgeven in verschillende gelijktijdig overlappende bewerkingen en vervolgens een van de wachtfuncties voor meerdere objecten om te wachten totdat een van de gebeurtenisobjecten wordt gesignaleerd.

Een thread maakt gebruik van de functie CreateEvent of CreateEventEx om een gebeurtenisobject te maken. De thread die wordt gemaakt, geeft de initiële status van het object aan en geeft aan of het een gebeurtenisobject handmatig opnieuw instellen of automatisch opnieuw instellen is. De thread die wordt gemaakt, kan ook een naam voor het gebeurtenisobject opgeven. Threads in andere processen kunnen een ingang openen voor een bestaand gebeurtenisobject door de naam ervan op te geven in een aanroep naar de OpenEvent-functie. Zie interprocessynchronisatievoor meer informatie over namen voor mutex-, gebeurtenis-, semafore- en timerobjecten.

Gebeurtenisobjecten gebruiken