我有一个程序,并希望通过发送SIGINT
来将某些数据写入文件而不是立即退出来停止它。但是,如果程序的用户再次发送SIGINT
,则程序应立即退出,并忘记将数据写入文件。boost :: asio signal_set处理程序仅在第一个信号被捕获后才执行,并忽略同一类型的连续信号
为了便于携带,我想用boost::asio
来达到此目的。
我的初始(简化)方法(见下文)不起作用。这是不可能的或者我错过了什么?
处理程序似乎只被调用一次(打印出消息),并且程序在循环达到最大迭代次数时总是停止。
void handler(
const boost::system::error_code& error,
int signal_number) {
if (!error) {
static bool first = true;
if(first) {
std::cout << " A signal(SIGINT) occurred." << std::endl;
// do something like writing data to a file
first = false;
}
else {
std::cout << " A signal(SIGINT) occurred, exiting...." << std::endl;
exit(0);
}
}
}
int main() {
// Construct a signal set registered for process termination.
boost::asio::io_service io;
boost::asio::signal_set signals(io, SIGINT);
// Start an asynchronous wait for one of the signals to occur.
signals.async_wait(handler);
io.run();
size_t i;
for(i=0;i<std::numeric_limits<size_t>::max();++i){
// time stepping loop, do some computations
}
std::cout << i << std::endl;
return 0;
}
感谢您的答复,这不仅回答了我原来的问题,但也期待我的下一个问题。如果没有在后台运行io_service,程序就不会停止,如果SIGINT没有发送给进程,显然不是我的预期行为。 – coder 2014-09-02 21:06:05