boost asio程序优雅的退出 一

当程序能够拦截kill进程的信号,然后清理资源再退出进程时,就是优雅的退出。boost的asio提供了这个机制。下面用最少的代码演示了这个功能:

#include <cstdlib>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <iostream>

using namespace boost;
using namespace boost::asio;

using namespace std;

io_service s;

void handle_stop() {
    cout << "x" << endl;
    s.stop();
}

int main(int argc, char** argv) {
    
    // The signal_set is used to register for process termination notifications.
    boost::asio::signal_set signals(s);
    
    signals.add(SIGINT);
    signals.add(SIGTERM);
#if defined(SIGQUIT)
    signals.add(SIGQUIT);
#endif
    signals.async_wait(boost::bind(&handle_stop));
    
    s.run();
    return 0;
}

先定义了全局变量io_service s, 然后基于这个构造一个信号量集合signals.

再添加拦截的信号,然后进入注册异步等待函数handle_stop。

该函数负责关闭io_service。


最后调用io_service::run函数进入等待。run函数直到stop被调用才会退出。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值