当前位置: 首页 > news >正文

梅州做网站西安百度推广公司

梅州做网站,西安百度推广公司,大理装饰公司做网站,桂林市七星区疫情最新消息👻 概念 信号 —— 操作系统传给进程的中断,会提早终止程序有些信号不能被程序捕获,有些则可以被捕获,并基于信号采取适当的动作 信号描述SIGABRT程序的异常终止,如调用 abortSIGFPE错误的算术运算,比如除…

👻 概念

  • 信号 —— 操作系统传给进程的中断,会提早终止程序
  • 有些信号不能被程序捕获,有些则可以被捕获,并基于信号采取适当的动作
信号描述
SIGABRT程序的异常终止,如调用 abort
SIGFPE错误的算术运算,比如除以零或导致溢出的操作
SIGILL检测非法指令
SIGINT程序终止 (interrupt) 信号
SIGSEGV非法访问内存
SIGTERM发送到程序的终止请求

👻 准备工作

使用信号处理需要包含 <csignal> 头文件:

#include <csignal>

👻 捕获信号

👾语法格式

使用 signal() 函数 捕获信号

void signal(registered signal, signal handler)
  • 参数 signal —— 要设置信号的标识符

  • 参数 handler —— 指向信号处理函数的指针,函数返回值是指向先前信号处理函数的指针:

    • 先前没有设置信号处理函数,返回值为 SIG_DFL
    • 先前设置的信号处理函数为 SIG_IGN,则返回值为 SIG_IGN

👾示例代码

  • 使用 signal() 函数捕获 SIGINT 信号,并将其与信号处理程序 signalHandler() 相关联。
void signalHandler(int signum) {cout << "Interrupt signal (" << signum << ") received.\n";exit(signum);	// 终止程序
}...// 注册信号 SIGINT 和信号处理程序
signal(SIGINT, signalHandler);
while(1) {cout << "Going to sleep...." << endl;sleep(1);
}
Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.	// 按下 ctrl+c 键时退出程序

👻 生成信号

👾语法格式

使用 raise() 函数 生成信号

int raise (signal sig);
  • 参数 sig —— 要发送的整数信号编号,包括 SIGINTSIGABRTSIGFPESIGILLSIGSEGVSIGTERMSIGHUP

👾示例代码

  • 使用 raise() 函数生成 SIGINT 信号,并通过 signal() 函数捕获并处理。
void signalHandler( int signum ) {cout << "Interrupt signal (" << signum << ") received.\n";exit(signum);
}...signal(SIGINT, signalHandler);int i = 0;
while(++i) {cout << "Going to sleep...." << endl;if(i==3)raise( SIGINT);	// 生成 SIGINT 信号sleep(1);
}

Sleep函数

  • 功能:执行挂起,等待一段时间后再继续执行

  • 用法

    void Sleep(DWORD dwMilliseconds);	// Windows系统,dwMilliseconds单位毫秒
    
    unsigned int sleep(unsigned int seconds);	// POSIX系统,seconds单位秒
    
  • 注意

    • POSIX系统(如LinuxmacOS)—— 使用 #include <unistd.h>sleep() ,单位秒

    • Windows系统 —— 使用 #include <windows.h>Sleep() ,单位毫秒

http://www.ritt.cn/news/1.html

相关文章: