/* * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "event_win.h" #include "Mmsystem.h" namespace webrtc { EventWindows::EventWindows() : _event(::CreateEvent(NULL /* security attributes */, FALSE /* manual reset */, FALSE /* initial state */, NULL /* name of event */)), _timerID(NULL) { } EventWindows::~EventWindows() { CloseHandle(_event); } bool EventWindows::Set() { // Note: setting an event that is already set has no effect. return SetEvent(_event) == 1 ? true : false; } bool EventWindows::Reset() { return ResetEvent(_event) == 1 ? true : false; } EventTypeWrapper EventWindows::Wait(unsigned long maxTime) { unsigned long res = WaitForSingleObject(_event, maxTime); switch(res) { case WAIT_OBJECT_0: return kEventSignaled; case WAIT_TIMEOUT: return kEventTimeout; default: return kEventError; } } bool EventWindows::StartTimer(bool periodic, unsigned long time) { if (_timerID != NULL) { timeKillEvent(_timerID); _timerID=NULL; } if (periodic) { _timerID=timeSetEvent(time, 0,(LPTIMECALLBACK)HANDLE(_event),0, TIME_PERIODIC|TIME_CALLBACK_EVENT_PULSE); } else { _timerID=timeSetEvent(time, 0,(LPTIMECALLBACK)HANDLE(_event),0, TIME_ONESHOT|TIME_CALLBACK_EVENT_SET); } if (_timerID == NULL) { return false; } return true; } bool EventWindows::StopTimer() { timeKillEvent(_timerID); _timerID = NULL; return true; } } // namespace webrtc