libuv程序,捕获Ctrl+C事件

在命令行下执行程序的时候,我们经常使用Ctrl+C来停止程序的执行。下面,我们看看libuv库如何捕获这个事件

思路

我们开启一个空转的消息,让程序一直有消息可以消费,不至于退出,在捕获Ctrl+C事件之后,停止空转消息,程序自然就退出了。

代码

/*
 * test_signal_ctrl_c.cc
 * when user input ctrl+c, we can get the signal.
 * Created on: 2015年2月6日
 */

#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <node/uv.h>

int64_t counter = 0;	//空转计数器
uv_idle_t idler;	//空转handle

void signal_cb(uv_signal_t* handle, int signum);	//消息回调函数
void wait_for_a_while(uv_idle_t* handle, int status);	//空转的回调函数

/**
 * 这儿我们关闭了系统所有的消息产生,程序就自动退出了
 */
void signal_cb(uv_signal_t* handle, int signum)
{
	printf("stop process!\n");

	uv_idle_stop(&idler);	//停止空转
	uv_close((uv_handle_t*)handle, NULL);	//停止消息监听
}

void wait_for_a_while(uv_idle_t* handle, int status)
{
	counter++;
	printf("the counter is:%ld\n", counter);
}

int main()
{
	uv_signal_t sig;
	uv_loop_t* loop;	//主消息循环
	loop = uv_default_loop();

	//监听消息
	uv_signal_init(loop, &sig);
	uv_signal_start(&sig, signal_cb, SIGINT);	//ctrl+c,对应SIGINT消息

	//空转
	uv_idle_init(loop, &idler);
	uv_idle_start(&idler, wait_for_a_while);

	uv_run(loop, UV_RUN_DEFAULT);
	return 0;
}

在程序执行中,我们按下Ctrl+C,输出如下

the counter is:50889
the counter is:50890
the counter is:50891
the counter is:50892
the counter is:50893^C
stop process!

稍微有点基础,看懂上面的代码还是很容易的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值