Continuos信号手柄

Continuos Signal handle

本文关键字:信号手 Continuos      更新时间:2023-10-16

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

现在让我们忽略相机和RS232。我的简短程序应该进入WARE循环,并要求" CIN"命令。如果command == 'b',则应升高信号并激活signal_handler()功能。现在它可以正常工作。

我想做的就是更改程序以在循环时重新进入并继续。我的程序在Interupt后终止。

当我删除exit(signum)时,程序将返回时循环并要求该命令。如果我再次输入" 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;
}

您遇到的问题是因为一个信号被捕获,信号处理程序是 reset 的默认值,在SIGINT的情况下是终止该过程。

您应该改用sigaction,可以指定行为(检查有关SA_RESETHAND标志的部分)。