前一篇非常简单,容易懂。不过用在C++中还是需要封装成可以多个项目中使用的代码。
下面将全局变量取消,创建了一个Server类,提供了run函数,同时Server对象还监听信号量,从而优雅的退出。
#include <cstdlib>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <iostream>
using namespace boost;
using namespace boost::asio;
using namespace std;
class Server {
public:
Server(io_service & s)
: io_(s), signals_(s) {
signals_.add(SIGINT);
signals_.add(SIGTERM);
#if defined(SIGQUIT)
signals_.add(SIGQUIT);
#endif
signals_.async_wait(boost::bind(&Server::stop, this));
}
void run() {
io_.run();
}
private:
void stop() {
cout << "x" << endl;
io_.stop();
}
private:
io_service& io_;
boost::asio::signal_set signals_;
};
int main(int argc, char** argv) {
io_service s;
Server server(s);
server.run();
return 0;
}
运行程序,然后用kill 命令杀掉进程。结果是显示了x后,程序退出。