| /* |
| * 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 |