1 /* 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "event_win.h" 12 13 #include "Mmsystem.h" 14 15 namespace webrtc { 16 EventWindows::EventWindows() 17 : _event(::CreateEvent(NULL /* security attributes */, 18 FALSE /* manual reset */, 19 FALSE /* initial state */, 20 NULL /* name of event */)), 21 _timerID(NULL) 22 { 23 } 24 25 EventWindows::~EventWindows() 26 { 27 CloseHandle(_event); 28 } 29 30 bool EventWindows::Set() 31 { 32 // Note: setting an event that is already set has no effect. 33 return SetEvent(_event) == 1 ? true : false; 34 } 35 36 bool EventWindows::Reset() 37 { 38 return ResetEvent(_event) == 1 ? true : false; 39 } 40 41 EventTypeWrapper EventWindows::Wait(unsigned long maxTime) 42 { 43 unsigned long res = WaitForSingleObject(_event, maxTime); 44 switch(res) 45 { 46 case WAIT_OBJECT_0: 47 return kEventSignaled; 48 case WAIT_TIMEOUT: 49 return kEventTimeout; 50 default: 51 return kEventError; 52 } 53 } 54 55 bool EventWindows::StartTimer(bool periodic, unsigned long time) 56 { 57 if (_timerID != NULL) 58 { 59 timeKillEvent(_timerID); 60 _timerID=NULL; 61 } 62 if (periodic) 63 { 64 _timerID=timeSetEvent(time, 0,(LPTIMECALLBACK)HANDLE(_event),0, 65 TIME_PERIODIC|TIME_CALLBACK_EVENT_PULSE); 66 } else { 67 _timerID=timeSetEvent(time, 0,(LPTIMECALLBACK)HANDLE(_event),0, 68 TIME_ONESHOT|TIME_CALLBACK_EVENT_SET); 69 } 70 71 if (_timerID == NULL) 72 { 73 return false; 74 } 75 return true; 76 } 77 78 bool EventWindows::StopTimer() 79 { 80 timeKillEvent(_timerID); 81 _timerID = NULL; 82 return true; 83 } 84 } // namespace webrtc 85