1// 2// detail/win_event.ipp 3// ~~~~~~~~~~~~~~~~~~~~ 4// 5// Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6// 7// Distributed under the Boost Software License, Version 1.0. (See accompanying 8// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9// 10 11#ifndef BOOST_ASIO_DETAIL_IMPL_WIN_EVENT_IPP 12#define BOOST_ASIO_DETAIL_IMPL_WIN_EVENT_IPP 13 14#if defined(_MSC_VER) && (_MSC_VER >= 1200) 15# pragma once 16#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) 17 18#include <boost/asio/detail/config.hpp> 19 20#if defined(BOOST_ASIO_WINDOWS) 21 22#include <boost/asio/detail/throw_error.hpp> 23#include <boost/asio/detail/win_event.hpp> 24#include <boost/asio/error.hpp> 25 26#include <boost/asio/detail/push_options.hpp> 27 28namespace boost { 29namespace asio { 30namespace detail { 31 32win_event::win_event() 33 : state_(0) 34{ 35#if defined(BOOST_ASIO_WINDOWS_APP) 36 events_[0] = ::CreateEventExW(0, 0, 37 CREATE_EVENT_MANUAL_RESET, EVENT_ALL_ACCESS); 38#else // defined(BOOST_ASIO_WINDOWS_APP) 39 events_[0] = ::CreateEventW(0, true, false, 0); 40#endif // defined(BOOST_ASIO_WINDOWS_APP) 41 if (!events_[0]) 42 { 43 DWORD last_error = ::GetLastError(); 44 boost::system::error_code ec(last_error, 45 boost::asio::error::get_system_category()); 46 boost::asio::detail::throw_error(ec, "event"); 47 } 48 49#if defined(BOOST_ASIO_WINDOWS_APP) 50 events_[1] = ::CreateEventExW(0, 0, 0, EVENT_ALL_ACCESS); 51#else // defined(BOOST_ASIO_WINDOWS_APP) 52 events_[1] = ::CreateEventW(0, false, false, 0); 53#endif // defined(BOOST_ASIO_WINDOWS_APP) 54 if (!events_[1]) 55 { 56 DWORD last_error = ::GetLastError(); 57 ::CloseHandle(events_[0]); 58 boost::system::error_code ec(last_error, 59 boost::asio::error::get_system_category()); 60 boost::asio::detail::throw_error(ec, "event"); 61 } 62} 63 64win_event::~win_event() 65{ 66 ::CloseHandle(events_[0]); 67 ::CloseHandle(events_[1]); 68} 69 70} // namespace detail 71} // namespace asio 72} // namespace boost 73 74#include <boost/asio/detail/pop_options.hpp> 75 76#endif // defined(BOOST_ASIO_WINDOWS) 77 78#endif // BOOST_ASIO_DETAIL_IMPL_WIN_EVENT_IPP 79