10_C++信号处理

参考:https://www.runoob.com/cplusplus/cpp-signal-handling.html

1.相关头文件<csignal>

2.信号处理的本质:注册回调
用函数signal注册一个对应信号sig的处理函数,当程序在此后运行时,收到该信号就会去回调这个信号处理函数。

3.信号从哪里来?
可以自己在程序中raise sig;
与可以是系统给出。

4.有哪些信号?
在头文件csignal中查看。
常见的有:
信号    描述
SIGABRT    程序的异常终止,如调用 abort。
SIGFPE    错误的算术运算,比如除以零或导致溢出的操作。
SIGILL    检测非法指令。
SIGINT    接收到交互注意信号。
SIGSEGV    非法访问内存。
SIGTERM    发送到程序的终止请求。

5.signal 与 raise原型:

void (*signal (int sig, void (*func)(int)))(int); 
int raise (signal sig);

6.示例:
描述:先raise 一个SIGINT,后Ctrl+C,让OS给SIGINT到该进程。
注意:注册一次,信号只能处理一次。
void SIGINT_Handler(int sig)
{
    static uint8_t count = 0;
    cout << "I am SIGINT_Handler" << endl;
    if( count++ < 2 )
        signal(SIGINT, SIGINT_Handler); //连续处理信号
}

int main(int argc, char **argv)
{

    signal(SIGINT, SIGINT_Handler);

    raise(SIGINT);

    while (true)
    {
        Sleep(1000);//windows下的S要大写
        cout << "in while" << endl;
    }

    return 0;
}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值