2015-05-07 41 views
2

我正在构建一个处理从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

为什么使用SIGINT(信号中断),而不是两个用户信号SIGUSR1或SIGUSR2中的一个? –

+0

因为我没有听说过他们,你能举个例子,我应该如何实施他们? – czmafi00

+0

只是一样,但用例如改为'SIGUSR1'。这里真的需要*来使用信号吗?为什么不简单地调用一个函数? –

回答

1

您遇到的问题是,因为一个信号被捕获,信号处理程序是重置到其默认,这在SIGINT的情况下终止进程。

您应该使用sigaction来代替,它允许您指定行为(请查看关于SA_RESETHAND标志的部分)。