00001 00002 #include "Core/precomp.h" 00003 #include "event_listener_win32.h" 00004 #include "event_trigger_win32.h" 00005 #include "API/Core/System/system.h" 00006 00008 // CL_EventListener_Win32 construction: 00009 00010 CL_EventListener_Win32::CL_EventListener_Win32(CL_EventListener *owner) 00011 : 00012 CL_EventListener_Generic(owner) 00013 { 00014 } 00015 00016 CL_EventListener_Win32::~CL_EventListener_Win32() 00017 { 00018 } 00019 00021 // CL_EventListener_Win32 implementation: 00022 00023 bool CL_EventListener_Win32::wait(int timeout) 00024 { 00025 if (triggers.empty()) // no triggers, just do the sleep. 00026 { 00027 CL_System::sleep(timeout); 00028 return false; 00029 } 00030 00031 int num_handles = triggers.size(); 00032 HANDLE *handles = new HANDLE[num_handles]; 00033 00034 int i = 0; 00035 std::list<CL_EventTrigger_Generic *>::iterator it; 00036 for (it = triggers.begin(); it != triggers.end(); it++) 00037 { 00038 CL_EventTrigger_Win32 *trigger = static_cast<CL_EventTrigger_Win32*>(*it); 00039 handles[i++] = trigger->wait_handle; 00040 } 00041 00042 DWORD result = WaitForMultipleObjects( 00043 num_handles, 00044 handles, 00045 FALSE, 00046 timeout == -1 ? INFINITE : timeout); 00047 00048 delete[] handles; 00049 00050 if (result == WAIT_TIMEOUT) return false; 00051 return true; 00052 }
1.2.6 written by Dimitri van Heesch,
© 1997-2001