Если вы ищете обработку завершения в Windows для Boost.Asio, вы можете взглянуть на примеры здесь .
Короче говоря, вам нужно обработать события win и call 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);