我想一个^ C处理程序添加到升压io_service对象。 在此之前加入,当它跑出来的I / O服务将退出(所有相关的插座已关闭)。 加入signal_set后,它不会退出,直到它得到一个SIGINT。 例如:
#include <boost/asio.hpp>
int main() {
boost::asio::io_service io_service;
boost::asio::signal_set exit_signal_set{io_service, SIGINT};
exit_signal_set.async_wait
([&](boost::system::error_code const&, int) {
std::cerr << "exiting, sigint" << std::endl;
io_service.stop();
});
io_service.run();
return 0;
}
这是我所期待立即退出,而不是等待一个信号,因为没有I / O工作要做。 一些同义词:
#include <poll.h>
#include <signal.h>
#include <stdio.h>
bool do_exit{false};
static void handle_int(int) {
do_exit = true;
}
int main() {
signal(SIGINT, handle_int);
nfds_t nfds{0};
struct pollfd pollfds[nfds];
while (true) {
poll(pollfds, nfds, 0);
if (do_exit) {
fprintf(stderr, "exiting, sigint\n");
break;
}
if (nfds == 0) {
// What I would like to happen.
fprintf(stderr, "exiting, nothing left to do\n");
break;
}
}
return 0;
}