我有下面的代碼片段:爲什麼提升asio信號處理程序立即取消?
#include <signal.h>
#include <boost/asio.hpp>
#include <iostream>
void startAsyncWaitForSignal(boost::asio::io_service& ioService)
{
boost::asio::signal_set signals{ioService};
signals.add(SIGTERM);
signals.async_wait(
[&ioService](boost::system::error_code errorCode, int signalNumber)
{
std::cerr << errorCode.message() << std::endl;
if (!errorCode) {
std::cerr << "received signal " << signalNumber << std::endl;
startAsyncWaitForSignal(ioService);
}
}
);
}
int main() {
boost::asio::io_service ioService;
startAsyncWaitForSignal(ioService);
ioService.run();
}
我期望這個程序等待,直到第一個SIGTERM的到來,然後等待下一個,然後再下一個,...
但是該程序立即終止與下面的輸出:
Operation canceled
這是什麼即時操作的取消原因是什麼?我試圖創建一個io_service :: work對象,但這只是改變了ioService.run()未完成的事實,但signal_set仍然立即取消。
我正在使用boost 1.54。有一個bug fix related to asio/signals in 1.55,但看起來像一個不同的問題。
當離開'startAsyncWaitForSignal()'地方'signal_set'變量被破壞,'async_wait'呼叫被取消。 'signal_set'需要活得更長一點... –
如果你將此作爲答案,我會接受這個。非常感謝! –