2014-02-28 65 views
0

所以,如果我是寫一個C/C++「堵」(或只是這可能需要很長的時間來執行功能)功能如何將我能夠檢測如果處理中斷,這樣我可以返回類似EINTR像sendrecv這樣的電話呢。我試着四處搜尋,還沒有想出如何判斷一個電話是否被打斷。或者這只是系統調用可以做的事情嗎?如果是這樣的話爲什麼呢?如何檢測何時中斷?

+0

這將取決於阻塞功能..該函數是否會使用系統調用?如果一切都是用戶空間,那麼你可以將這個函數用狀態封裝到一個類中。 –

+0

只爲狗屎和傻笑讓我們假設一個和一個沒有。讓我們假設沒有課程的直C。在那個時候,即使它是一個具有狀態的類,它仍然不會立即返回函數,它仍然會直接返回執行問題no的函數。 – csteifel

+1

你打算如何在不進行系統調用的情況下「阻止」? –

回答

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; 
}