【发布时间】:2014-07-12 16:27:41
【问题描述】:
我正在编写一个循环执行某些指令的代码(在 for 内),但如果当前执行由于某种原因需要很长时间才能完成,我想要中断执行,然后跳到下一个。这是我的代码:
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
...
所以 for 的执行被阻止。如何在 sigalarm 之后继续正常执行 for?
编辑
TIMEOUT 是启动代码时作为参数传递的值。 超时函数是一个简单的 printf:
void timeout_function() {
printf("cycle %d interrupted\n", i);
}
【问题讨论】:
-
TIMEOUT 值是多少
-
你在哪里打印
"cycle x interrupted"?请创建一个Minimal, Complete, and Verifiable example 并向我们展示。