
I'm splitting the timer functions in EventWrapper into a separate interface. - Users of the timer functions have different needs than users of a generic event - Providing a default implementation for EventWrapper that simply uses rtc::Event. This means that clients of WebRTC that don't use the relatively few classes, typically rendering classes, that depend on the event timer functionality, also don't pull in dependencies on multimedia timers. R=mflodman@webrtc.org, mflodman BUG= Review URL: https://webrtc-codereview.appspot.com/48599004 Cr-Commit-Position: refs/heads/master@{#8833} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8833 4adac7df-926f-26a2-2b94-8c16560cd09d
79 lines
2.0 KiB
C++
79 lines
2.0 KiB
C++
/*
|
|
* 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 "webrtc/system_wrappers/source/event_timer_win.h"
|
|
|
|
#include "Mmsystem.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// static
|
|
EventTimerWrapper* EventTimerWrapper::Create() {
|
|
return new EventTimerWin();
|
|
}
|
|
|
|
EventTimerWin::EventTimerWin()
|
|
: event_(::CreateEvent(NULL, // security attributes
|
|
FALSE, // manual reset
|
|
FALSE, // initial state
|
|
NULL)), // name of event
|
|
timerID_(NULL) {
|
|
}
|
|
|
|
EventTimerWin::~EventTimerWin() {
|
|
StopTimer();
|
|
CloseHandle(event_);
|
|
}
|
|
|
|
bool EventTimerWin::Set() {
|
|
// Note: setting an event that is already set has no effect.
|
|
return SetEvent(event_) == 1;
|
|
}
|
|
|
|
EventTypeWrapper EventTimerWin::Wait(unsigned long max_time) {
|
|
unsigned long res = WaitForSingleObject(event_, max_time);
|
|
switch (res) {
|
|
case WAIT_OBJECT_0:
|
|
return kEventSignaled;
|
|
case WAIT_TIMEOUT:
|
|
return kEventTimeout;
|
|
default:
|
|
return kEventError;
|
|
}
|
|
}
|
|
|
|
bool EventTimerWin::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);
|
|
}
|
|
|
|
return timerID_ != NULL;
|
|
}
|
|
|
|
bool EventTimerWin::StopTimer() {
|
|
if (timerID_ != NULL) {
|
|
timeKillEvent(timerID_);
|
|
timerID_ = NULL;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
} // namespace webrtc
|