我正在编写一个循环执行某些指令(在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)并向我们显示。 –