我正在尝试在Windows下使用boost :: asio等待信号,但是我无法添加信号。这是我尝试的:
boost::asio::io_service ioService;
boost::asio::signal_set quitSignals(ioService);
quitSignals.add(CTRL_C_EVENT);
quitSignals.add(CTRL_BREAK_EVENT);
quitSignals.add(CTRL_CLOSE_EVENT);
quitSignals.add(CTRL_LOGOFF_EVENT);
quitSignals.add(CTRL_SHUTDOWN_EVENT);
这给出了第一个调试声明(“无效信号或错误”,0),而其他则给出了无效的参数异常。我使用了错误的信号编号吗?我使用的常量在wincon.h中定义如下:
#define CTRL_C_EVENT 0
#define CTRL_BREAK_EVENT 1
#define CTRL_CLOSE_EVENT 2
// 3 is reserved!
// 4 is reserved!
#define CTRL_LOGOFF_EVENT 5
#define CTRL_SHUTDOWN_EVENT 6
最佳答案
我确实使用了错误的常数。常量与在signal.h中定义的Linux(SIGINT
,SIGTERM
,...)下的常量相同。
我以前使用过SetConsoleCtrlHandler
API(使用CTRL_C_EVENT
,...)。那就是让我感到困惑的原因。