Continuos信号句柄

时间:2015-05-07 11:48:47

标签: c++ signals

我正在构建一个处理从RS232端口接收的信号的算法。基本思路是从RS232接收信号,然后用相机抓取图像。

现在让我们忽略相机和RS232。我的短程序应该进入while循环,并询问“cin”命令。如果command == 'b',则应引发信号并激活signal_handler()功能。现在它工作正常。

我想要做的是更改程序以重新进入while循环并继续。我的程序在中断后终止。

当我删除exit(signum)时,程序返回while循环并请求命令。如果我再次输入'b'程序结束。

我哪里出错了?错误的信号或整个方法?
谢谢!

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

int main(){
    char Command = 'a';

    signal(SIGINT, signalHandler);

    while (true){
        cout << "Command: ";
        cin >> Command;
        if (Command == 'b'){
            raise(SIGINT);
        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

你遇到的问题是因为一个信号被捕获,信号处理程序重置到它的默认值,在SIGINT的情况下是终止进程。 / p>

您应该使用sigaction,这样可以指定行为(请查看有关SA_RESETHAND标志的部分)。