Looks like you want to know a lot about kernel objects :). Well, basically it's this way:
- You create an event, usually by calling CreateEvent function
- You pass handle of this event to all the threads that shall use your event. Depending on situation, there are numerous ways to do that - from passing handle in thread function arguments to duplicating it in another process
- When any of your threads need to wait for this event to occur, you call WaitForSingleObject or WaitForMultipleObjects function, passing event handle as an argument
- When condition being wait for is satisfied (you get the data to process, for example), another thread raises event by calling SetEvent function
- Next time waiting thread receives processor time, WaitForSingle object returns, so this thread can continue execution
- When needed, event can be reset (put in "not yet occured" state) by ResetEvent function, so you can repeat the process from step 3
- When no mere needed, Event handles should be closed by calling CloseHandle methods
This is very brief and incomplete description, missing a lot of details, but it should give you the basics. Something to start with before diving deeper into MSDN :)