summaryrefslogtreecommitdiffstats
path: root/base/synchronization/waitable_event_watcher_win.cc
diff options
context:
space:
mode:
Diffstat (limited to 'base/synchronization/waitable_event_watcher_win.cc')
-rw-r--r--base/synchronization/waitable_event_watcher_win.cc34
1 files changed, 11 insertions, 23 deletions
diff --git a/base/synchronization/waitable_event_watcher_win.cc b/base/synchronization/waitable_event_watcher_win.cc
index 43e3c47..46d47ac 100644
--- a/base/synchronization/waitable_event_watcher_win.cc
+++ b/base/synchronization/waitable_event_watcher_win.cc
@@ -10,35 +10,23 @@
namespace base {
-WaitableEventWatcher::ObjectWatcherHelper::ObjectWatcherHelper(
- WaitableEventWatcher* watcher)
- : watcher_(watcher) {
-};
-
-void WaitableEventWatcher::ObjectWatcherHelper::OnObjectSignaled(HANDLE h) {
- watcher_->OnObjectSignaled();
-}
-
-
WaitableEventWatcher::WaitableEventWatcher()
- : ALLOW_THIS_IN_INITIALIZER_LIST(helper_(this)),
- event_(NULL),
- delegate_(NULL) {
+ : event_(NULL) {
}
WaitableEventWatcher::~WaitableEventWatcher() {
}
-bool WaitableEventWatcher::StartWatching(WaitableEvent* event,
- Delegate* delegate) {
- delegate_ = delegate;
+bool WaitableEventWatcher::StartWatching(
+ WaitableEvent* event,
+ const EventCallback& callback) {
+ callback_ = callback;
event_ = event;
-
- return watcher_.StartWatching(event->handle(), &helper_);
+ return watcher_.StartWatching(event->handle(), this);
}
void WaitableEventWatcher::StopWatching() {
- delegate_ = NULL;
+ callback_.Reset();
event_ = NULL;
watcher_.StopWatching();
}
@@ -47,14 +35,14 @@ WaitableEvent* WaitableEventWatcher::GetWatchedEvent() {
return event_;
}
-void WaitableEventWatcher::OnObjectSignaled() {
+void WaitableEventWatcher::OnObjectSignaled(HANDLE h) {
WaitableEvent* event = event_;
- Delegate* delegate = delegate_;
+ EventCallback callback = callback_;
event_ = NULL;
- delegate_ = NULL;
+ callback_.Reset();
DCHECK(event);
- delegate->OnWaitableEventSignaled(event);
+ callback.Run(event);
}
} // namespace base