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 "webrtc/system_wrappers/source/event_timer_win.h" 12 13#include "Mmsystem.h" 14 15namespace webrtc { 16 17// static 18EventTimerWrapper* EventTimerWrapper::Create() { 19 return new EventTimerWin(); 20} 21 22EventTimerWin::EventTimerWin() 23 : event_(::CreateEvent(NULL, // security attributes 24 FALSE, // manual reset 25 FALSE, // initial state 26 NULL)), // name of event 27 timerID_(NULL) { 28} 29 30EventTimerWin::~EventTimerWin() { 31 StopTimer(); 32 CloseHandle(event_); 33} 34 35bool EventTimerWin::Set() { 36 // Note: setting an event that is already set has no effect. 37 return SetEvent(event_) == 1; 38} 39 40EventTypeWrapper EventTimerWin::Wait(unsigned long max_time) { 41 unsigned long res = WaitForSingleObject(event_, max_time); 42 switch (res) { 43 case WAIT_OBJECT_0: 44 return kEventSignaled; 45 case WAIT_TIMEOUT: 46 return kEventTimeout; 47 default: 48 return kEventError; 49 } 50} 51 52bool EventTimerWin::StartTimer(bool periodic, unsigned long time) { 53 if (timerID_ != NULL) { 54 timeKillEvent(timerID_); 55 timerID_ = NULL; 56 } 57 58 if (periodic) { 59 timerID_ = timeSetEvent(time, 0, (LPTIMECALLBACK)HANDLE(event_), 0, 60 TIME_PERIODIC | TIME_CALLBACK_EVENT_PULSE); 61 } else { 62 timerID_ = timeSetEvent(time, 0, (LPTIMECALLBACK)HANDLE(event_), 0, 63 TIME_ONESHOT | TIME_CALLBACK_EVENT_SET); 64 } 65 66 return timerID_ != NULL; 67} 68 69bool EventTimerWin::StopTimer() { 70 if (timerID_ != NULL) { 71 timeKillEvent(timerID_); 72 timerID_ = NULL; 73 } 74 75 return true; 76} 77 78} // namespace webrtc 79