| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "flutter/shell/platform/windows/event_watcher.h" |
| |
| namespace flutter { |
| |
| EventWatcher::EventWatcher(std::function<void()> callback) |
| : callback_(callback) { |
| handle_ = CreateEvent(NULL, TRUE, FALSE, NULL); |
| |
| RegisterWaitForSingleObject(&handle_for_wait_, handle_, &CallbackForWait, |
| reinterpret_cast<void*>(this), INFINITE, |
| WT_EXECUTEONLYONCE | WT_EXECUTEINWAITTHREAD); |
| } |
| |
| EventWatcher::~EventWatcher() { |
| UnregisterWait(handle_for_wait_); |
| CloseHandle(handle_); |
| } |
| |
| HANDLE EventWatcher::GetHandle() { |
| return handle_; |
| } |
| |
| // static |
| VOID CALLBACK EventWatcher::CallbackForWait(PVOID context, BOOLEAN) { |
| EventWatcher* self = reinterpret_cast<EventWatcher*>(context); |
| ResetEvent(self->handle_); |
| self->callback_(); |
| } |
| |
| } // namespace flutter |