Creating Windows events using Win32 C language
Compiler: Visual C++ Express Edition 2005
Compiled on Platform: Windows Xp Pro SP2
Target platform: none, just for learning and fun
Header file: Standard and Windows
Additional library: Windows Platform SDK
Additional project setting: Set project to be compiled as C
Project -> your_project_name Properties -> Configuration Properties -> C/C++ -> Advanced -> Compiled As: Compiled as C Code (/TC)
Other info: non-CLR or unmanaged.
To do: Creating Windows events in C programming
To show: The various Windows threads and processes functions
// For WinXp
#define _WIN32_WINNT 0x0501
#include <windows.h>
#include <stdio.h>
int main(void)
{
HANDLE hEvents[2];
DWORD i, dwEvent;
// Create two event objects.
for (i = 0; i < 2; i++)
{
hEvents[i] = CreateEvent(
NULL, // no security attributes
FALSE, // auto-reset event object
FALSE, // initial state is non-signaled
NULL); // unnamed object
if (hEvents[i] == NULL)
{
printf("CreateEvent() error: %u\n", GetLastError());
ExitProcess(0);
}
else
printf("CreateEvent() #%u is OK.\n", i);
}
// The creating thread waits for other threads or processes to signal the event objects.
dwEvent = WaitForMultipleObjects(
2, // number of objects in array
hEvents, // array of objects
FALSE, // wait for any
5000); // 5000 ms
// Return value indicates which event is signaled.
switch (dwEvent)
{
// hEvent[0] was signaled.
case WAIT_OBJECT_0 + 0:
// TODO: Perform tasks required by this event.
printf("hEvent[%u] was signaled.\n", i);
break;
// hEvent[1] was signaled.
case WAIT_OBJECT_0 + 1:
// TODO: Perform tasks required by this event.
printf("hEvent[%u] was signaled.\n", i);
break;
// Return value is invalid.
default:
printf("Wait error: %u\n", GetLastError());
// Exit peacefully...
ExitProcess(0);
}
return 0;
}
Output example:
CreateEvent() #0 is OK.
CreateEvent() #1 is OK.
Wait error: 0
Press any key to continue . . .