0

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
4

1 に答える 1

1

確かに間違った定数を使用しました。定数は、signal.h で定義されている Linux ( SIGINTSIGTERM、...) と同じです。

SetConsoleCtrlHandler以前にAPIを使用しました(これはCTRL_C_EVENT、...を使用します)。それが私を混乱させたものです。

于 2013-11-05T11:02:05.497 に答える