如何检测何时中断?

时间:2014-02-28 03:21:39

标签: c++ c interrupt interrupt-handling

因此,如果我要写一个C / C ++“阻塞”(或者只是一个可能需要很长时间才能执行的函数)函数,我怎么能够检测到处理是否被中断以便我可以返回类似的东西EINTR就像sendrecv这样的来电。我试过四处寻找并且还没弄清楚如何判断呼叫是否被中断。或者这只是系统调用可以做的事情吗?如果是这样的话,为什么会这样呢?

1 个答案:

答案 0 :(得分:1)

添加一个标志以指示发生了中断:

volatile std::sig_atomic_t processing_interrupted = false;

还有一个中断处理函数来设置它:

extern "C" void interrupt_processing( int ) {
    processing_interrupted = true;
}

安装并监控中断处理程序,只要它有效,然后将其卸载:

int do_processing() {
    processing_interrupted = false;
    std::signal( SIGINT, & interrupt_processing );

    // Do something for a long time.

    // Check flag periodically:
    if ( processing_interrupted ) return EINTR;

    std::signal( SIGINT, SIG_DFL );
    return 0;
}