Win32 Event Objects


Introduction

A Win32 event is a system object that provides for inter-thread communication which supports two states - signaled and Non-signaled.
  1. Signaled State - (Active or On) Used by waiting threads to know that they may proceed.
  2. Non-signaled State - (Not Active or Off) indicates to waiting threads that they must continue to wait.
There are two types of events: manual-reset and auto-reset.
  • Manual-Reset Event
    • An explicit call to the Win32 API ResetEvent() must be made to move the event from the signaled to Non-signaled state. The syntax for the ResetEvent is given below:
 BOOL WINAPI ResetEvent(HANDLE hEvent);
    • A call to the Win32 API SetEvent() is made to move from the Non-signaled state to signaled state. 
BOOL WINAPI SetEvent(HANDLE hEvent);
  • An Auto-Reset Event
    • Moves from the signaled to Non-signaled state automatically without a call to ResetEvent().
    • However, a call to SetEvent() must still be made to move to the signaled state.

Create Event Object

Win32 API provides a function called CreateEvent, which is used to create the event thread synchronization object. The manual or auto reset event choice is passed to the function as a parameter. The syntax for the function is given below:

HANDLE WINAPI CreateEvent(
  LPSECURITY_ATTRIBUTES lpEventAttributes,
  BOOL bManualReset,
  BOOL bInitialState,
  LPCTSTR lpName
           );

Event Functions


Event function
Description
Creates or opens a named or unnamed event object.
Creates or opens a named or unnamed event object and returns a handle to the object.
Opens an existing named event object.
Sets the specified event object to the signaled state and then resets it to the nonsignaled state after releasing the appropriate number of waiting threads.
Sets the specified event object to the nonsignaled state.
Sets the specified event object to the signaled state.
  

Wait Functions


Wait function
Description
Waits until one or all of the specified objects are in the signaled state or the time-out interval elapses. The objects can include input event objects.
Waits until one or all of the specified objects are in the signaled state, an I/O completion routine or asynchronous procedure call (APC) is queued to the thread, or the time-out interval elapses. The array of objects can include input event objects.
Directs a wait thread in the thread pool to wait on the object.
Signals one object and waits on another object as a single operation.
Cancels a registered wait operation.
Cancels a registered wait operation.
Waits until one or all of the specified objects are in the signaled state or the time-out interval elapses.
Waits until one or all of the specified objects are in the signaled state, an I/O completion routine or asynchronous procedure call (APC) is queued to the thread, or the time-out interval elapses.
Waits until the specified object is in the signaled state or the time-out interval elapses.
Waits until the specified object is in the signaled state, an I/O completion routine or asynchronous procedure call (APC) is queued to the thread, or the time-out interval elapses.
Waits for the value at the specified address to change.
An application-defined function that serves as the starting address for a timer callback or a registered wait callback.
Wakes all threads waiting for the value of an address to change.
Wakes a thread waiting for the value of an address to change.