0
所以,如果我是寫一個C/C++「堵」(或只是這可能需要很長的時間來執行功能)功能如何將我能夠檢測如果處理中斷,這樣我可以返回類似EINTR像send
和recv
這樣的電話呢。我試着四處搜尋,還沒有想出如何判斷一個電話是否被打斷。或者這只是系統調用可以做的事情嗎?如果是這樣的話爲什麼呢?如何檢測何時中斷?
所以,如果我是寫一個C/C++「堵」(或只是這可能需要很長的時間來執行功能)功能如何將我能夠檢測如果處理中斷,這樣我可以返回類似EINTR像send
和recv
這樣的電話呢。我試着四處搜尋,還沒有想出如何判斷一個電話是否被打斷。或者這只是系統調用可以做的事情嗎?如果是這樣的話爲什麼呢?如何檢測何時中斷?
添加標記,以表明發生了中斷:
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;
}
這將取決於阻塞功能..該函數是否會使用系統調用?如果一切都是用戶空間,那麼你可以將這個函數用狀態封裝到一個類中。 –
只爲狗屎和傻笑讓我們假設一個和一個沒有。讓我們假設沒有課程的直C。在那個時候,即使它是一個具有狀態的類,它仍然不會立即返回函數,它仍然會直接返回執行問題no的函數。 – csteifel
你打算如何在不進行系統調用的情況下「阻止」? –