boost asio::signal_set用法

signal_set

signal_set提供了一个信号,方便异步处理程序,比如设置了SIGINT信号,程序中断先连接一个函数,如果触发了中断这个信号就会触发这个函数。

基本用法

asio::io_service service;
asio::signal_set sigset(service);
m_signals.add(SIGINT);     //添加信号,remove删除
sigset.async_wait(signal_handler);  //设置触发函数
sigset.async_wait(boost::bind(&CClass::signal_handler, shared_from_this()));
sigset.cancel(); // 清空(删除)集合中的所有信号量,并删除所有通知队列里的事件,如果集合本身为空,则抛出错误。
sigset.clear(); //不改变集合中的信号量,向所有与信号有关的操作抛出错误码来终止其操作。

使用例子

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

using namespace boost;

void signal_handler(const boost::system::error_code& err, int signal)
{
	switch (signal) {
		case SIGINT:
			std::cout << "SIGNINT" << std::endl;
			break;
		case SIGTERM:
			std::cout << "SIGNTERM" << std::endl;
			break;
		default:
			break;
	}
}

int main(int argc, const char * argv[]) {


	asio::io_service service;

	asio::signal_set sigset(service, SIGINT, SIGTERM);
	sigset.async_wait(signal_handler);

	boost::system::error_code ec;
	service.run(ec);
	if(ec)
	{
		std::cout << boost::system::system_error(ec).what() << std::endl;
	}
	std::cout << "End" << std::endl;


}
sigset 可以设置的值有:
#define SIGINT          2       /* interrupt */
#define SIGILL          4       /* illegal instruction - invalid function image */
#define SIGFPE          8       /* floating point exception */
#define SIGSEGV         11      /* segment violation */
#define SIGTERM         15      /* Software termination signal from kill */
#define SIGBREAK        21      /* Ctrl-Break sequence */
#define SIGABRT         22      /* abnormal termination triggered by abort call */

参考网址

boost:asio信号量signal_set源码分析及使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值