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