Latest web development tutorials

procesamiento de la señal C ++

La señal se hace pasar por el sistema operativo, el proceso se interrumpe, lo hará la terminación anticipada de un programa. En UNIX, Linux, Mac OS X o los sistemas Windows, puede presionar Ctrl + C interrupción.

Algunas señales no se pueden procedimientos atrapados, pero enumeran en la tabla a continuación la señal puede ser capturado en el programa, y ​​pueden tomar la acción apropiada basándose en la señal. Estas señales se definen en el archivo de cabecera C ++ <csignal> en.

信号 描述
SIGABRT 程序的异常终止,如调用abort
SIGFPE 错误的算术运算,比如除以零或导致溢出的操作。
SIGILL 检测非法指令。
SIGINT 接收到交互注意信号。
SIGSEGV 非法访问内存。
SIGTERM 发送到程序的终止请求。

función de señal ()

biblioteca de C ++ proporciona la función de procesamiento de señalde la señal para capturar las emergencias.La siguiente es la sintaxis de la función de señal ():

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

Esta función acepta dos parámetros: el primer parámetro es un número entero que representa el número de una señal; segundo parámetro es un puntero a una función de procesamiento de señal.

Vamos a escribir un simple programa en C ++ que utiliza la función de señal () para capturar la señal SIGINT. No importa lo que desea capturar la señal en su programa, debe utilizar la función deseñal de registro de la señal y el procesamiento de la señal asociada con el programa.Considere los siguientes ejemplos:

#include <iostream>
#include <csignal>

using namespace std;

void signalHandler( int signum )
{
    cout << "Interrupt signal (" << signum << ") received.\n";

    // 清理并关闭
    // 终止程序  

   exit(signum);  

}

int main ()
{
    // 注册信号 SIGINT 和信号处理程序
    signal(SIGINT, signalHandler);  

    while(1){
       cout << "Going to sleep...." << endl;
       sleep(1);
    }

    return 0;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Going to sleep....
Going to sleep....
Going to sleep....

Ahora, pulse Ctrl + C para interrumpir el programa, verás la captura de la señal del programa y salir del programa para imprimir el siguiente:

Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.

aumentar la función ()

Puede utilizar la función desubida () genera una señal, la función de señal toma un número entero como un parámetro, la siguiente sintaxis:

int raise (signal sig);

Aquí, sig es la señal que va a números Estas señales incluyen: transmitida SIGINT, SIGABRT, SIGFPE, SIGILL , SIGSEGV, SIGTERM, SIGHUP.Esto es lo que utilizamos la subida () genera una señal dentro de una instancia:

#include <iostream>
#include <csignal>

using namespace std;

void signalHandler( int signum )
{
    cout << "Interrupt signal (" << signum << ") received.\n";

    // 清理并关闭
    // 终止程序 

   exit(signum);  

}

int main ()
{
    int i = 0;
    // 注册信号 SIGINT 和信号处理程序
    signal(SIGINT, signalHandler);  

    while(++i){
       cout << "Going to sleep...." << endl;
       if( i == 3 ){
          raise( SIGINT);
       }
       sleep(1);
    }

    return 0;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados, y saldrá automáticamente:

Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.