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

发布于 2024-12-07 16:42:05 字数 125 浏览 3 评论 0 原文

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

My program needs to gracefully terminate when a Windows event becomes signaled. I am using Boost's ASIO library for it's sockets. I only have one io_service object. How can I 'register' this event handle with the io_service, so it calls a callback when the event signals?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

余罪 2024-12-14 16:42:06

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

简而言之,您需要处理获胜事件并在系统上调用停止。

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);

If you're looking for termination handling on Windows for Boost.Asio you can take a look at the examples here.

In short, you need to handle the win events and call stop on your system.

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;
  }
}

This uses a function object:

boost::function0<void> console_ctrl_function;

that you need to bind to your system's shutdown/stop routine.

// Set console control handler to allow server to be stopped.
console_ctrl_function = boost::bind(&your_system::shutdown, &s);
SetConsoleCtrlHandler(console_ctrl_handler, TRUE);
毅然前行 2024-12-14 16:42:06

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

Beginning with Boost 1.49 it appears that it is possible to invoke a handle when an event becomes signaled, see http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/overview/windows/object_handle.html.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文