Latest web development tutorials

processamento de sinal C ++

O sinal é transmitido pelo sistema operativo, o processo é interrompido, vai terminação precoce de um programa. No UNIX, Linux, Mac OS X ou sistemas Windows, você pode pressionar Ctrl + C interrupção.

Alguns sinais não pode ser apanhado procedimentos, mas listados na tabela abaixo, o sinal pode ser capturado no programa, e pode tomar as medidas adequadas com base no sinal. Estes sinais são definidos no C ++ arquivo de cabeçalho <csignal> in.

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

função de sinal ()

biblioteca C ++ fornece a função de processamento de sinalde sinal para capturar emergências.O que se segue é a função de sinal de sintaxe ():

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

Esta função aceita dois parâmetros: o primeiro parâmetro é um número inteiro que representa o número de um sinal, o segundo parâmetro é um ponteiro para uma função de processamento de sinal.

Vamos escrever um programa simples C ++ que usa a função signal () para capturar sinal SIGINT. Não importa o que você deseja capturar o sinal em seu programa, você deve usar a função desinal para registrar o sinal eo processamento de sinal associado com o programa.Considere os seguintes exemplos:

#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;
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

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

Agora, pressione Ctrl + C para interromper o programa, você verá a captura de sinal de programa, e sair do programa para imprimir o seguinte:

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

levantar function ()

Você pode usar oaumento function ()gera um sinal, a função de sinal leva um número inteiro como um parâmetro, a seguinte sintaxe:

int raise (signal sig);

Aqui, sig é o sinal a ser transmitido números Esses sinais incluem: SIGINT, SIGABRT, SIGFPE, SIGILL , SIGSEGV, SIGTERM, SIGHUP.Aqui está o que nós usamos o raise () função gera um sinal dentro de uma instância:

#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;
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados, e sairá automaticamente:

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