使用Boost ASIO,我如何等待Windows事件?

时间:2011-09-29 19:37:53

标签: winapi boost-asio handle

当Windows事件发出信号时,我的程序需要正常终止。我正在使用Boost的ASIO库作为它的套接字。我只有一个io_service个对象。如何使用io_service“注册”此事件句柄,以便在事件发出信号时调用回调?

2 个答案:

答案 0 :(得分:2)

如果您正在Windows上寻找Boost.Asio的终止处理,您可以查看示例here

简而言之,您需要处理win事件并在系统上调用stop。

BOOL WINAPI console_ctrl_handler(DWORD ctrl_type)
{
  switch (ctrl_type)
  {
    case CTRL_C_EVENT:
    case CTRL_BREAK_EVENT:
    case CTRL_CLOSE_EVENT:
    case CTRL_SHUTDOWN_EVENT:
      console_ctrl_function();
      return TRUE;
    default:
      return FALSE;
  }
}

这使用了一个函数对象:

boost::function0<void> console_ctrl_function;

您需要绑定到系统的关闭/停止例程。

// Set console control handler to allow server to be stopped.
console_ctrl_function = boost::bind(&your_system::shutdown, &s);
SetConsoleCtrlHandler(console_ctrl_handler, TRUE);

答案 1 :(得分:0)

从Boost 1.49开始,似乎可以在事件发出信号时调用句柄,请参阅http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/overview/windows/object_handle.html