我正在編寫一個循環執行某些指令(在for中)的代碼,但如果當前執行由於某種原因需要很長時間才能完成,我想中斷執行,並跳到下一個一。這是我的代碼:SIGALRM:在執行後繼續執行
int i =0; //global var
for (i = 0; i < 5; i++) {
signal(SIGALRM, timeout_function);
alarm(TIMEOUT);
if (i == 2) {
int number;
scanf("%d", &number);
//simulate long operation
} else {
printf("current cycle: %d\n ", i);
alarm(0);
}
}
timeout_function只是打印一條消息。 ,現在這是印在執行:
current cycle: 0
current cycle: 1
cycle 2 interrupted
cycle 2 interrupted
cycle 2 interrupted
...
所以對於被阻止的執行。如何在sigalarm之後繼續正常執行?
EDIT
TIMEOUT是作爲參數時啓動代碼傳遞的值。 超時函數是一個簡單的printf:
void timeout_function() {
printf("cycle %d interrupted\n", i);
}
1個
超時設爲i = 2
2 //用戶從標準
當前週期輸入什麼是超時值 –
你在哪裏打印'「循環x中斷」'?請創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)並向我們顯示。 –