Опитвам се да чакам сигнали с boost :: asio под Windows, но не мога да добавя сигнали.Това е, което аз се опитах:
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
Отговори:
1 за отговор № 1Използвах наистина грешните константи. Константите са същите като в Linux (SIGINT
, SIGTERM
, ...), определени в signal.h.
Използвах SetConsoleCtrlHandler
API преди (който използва CTRL_C_EVENT
, ...). Това ме обърка.