gpt4 book ai didi

c - 信号 : continue execution after fired

转载 作者:行者123 更新时间:2023-11-30 17:31:15 25 4
gpt4 key购买 nike

我正在编写一段循环执行某些指令(在 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 的执行被阻止。 sigaarm之后如何继续正常执行for?

编辑

TIMEOUT 是启动代码时作为参数传递的值。超时函数是一个简单的 printf:

void timeout_function() {
printf("cycle %d interrupted\n", i);

}

最佳答案

直到i的值小于2时,使用alarm(0)取消所有闹钟设置
可能的原因是,一旦i >= 2的值,程序执行正在等待用户输入数字
然后信号处理程序“timeout_function”被调用。这意味着执行没有被阻止,但系统正在等待用户输入。

同样,在 TIMEOUT 设置为 1 的同一程序之后,我得到了预期的以下结果。

current cycle: 0
current cycle: 1
time out i = 2
2 //user input from stdin
current cycle: 3
current cycle: 4

关于c - 信号 : continue execution after fired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24714964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com