1) WaitForSingleObject kehrt in 2 Fällen zurück - entweder das Objekt auf das man wartet (in deinem Fall das Event) wird signalisiert, oder aber die TimeOut-Zeit läuft ab. Solange keines von beidem der Fall ist ist der Thread nicht zuteilungsfähig...
2) Beispiel kann ich dir im Moment nicht anbieten (frühestens am Nachmittag), aber schau dir mal im
SDK/
MSDN die Funktionen CreateEvent, SetEvent, .... an