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