gpt4 book ai didi

c - linux,C,如何取消一个定时器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:44 24 4
gpt4 key购买 nike

我想创建一个计时器并将其设置为仅在 60 秒后触发一次。但在 60 秒触发之前,用户通过 Ctrl+C 取消了应用程序。如何取消计时器并优雅地退出程序?

例如,对于 Paul Griffiths 对此主题的回答中的代码:Signal Handler to stop Timer in C

如果用户在间隔触发前通过 Ctrl+C 停止应用程序,我该如何取消 signal_handler 中的计时器?

void signal_handler(int n)
{
//Ctrl+C
if (n == SIGINT){
PRINT_ERR("Ctrl+C");
**//how to cancel it_val here???**
}
exit (1);
}

bool timer_fired = false;
void TimerStop(int signum) {
printf("Timer ran out! Stopping timer\n");
timer_fired = true;
}

struct itimerval it_val;

void TimerSet(struct itimerval it_val, int interval)
{
printf("starting timer\n");

it_val.it_value.tv_sec = interval;
it_val.it_value.tv_usec = 0;
it_val.it_interval.tv_sec = 0;
it_val.it_interval.tv_usec = 0;

if (signal(SIGALRM, TimerStop) == SIG_ERR) {
perror("Unable to catch SIGALRM");
exit(1);
}
if (setitimer(ITIMER_REAL, &it_val, NULL) == -1) {
perror("error calling setitimer()");
exit(1);
}
}

int main()
{
signal(SIGINT, signal_handler);
TimerSet(it_val, INTERVAL);

while ( !timer_fired )
do_something();
return 0;
}

最佳答案

再次调用 setitimer(2),时间为 0 以禁用计时器。

A timer which is set to zero (it_value is zero or the timer expires and it_interval is zero) stops.

关于c - linux,C,如何取消一个定时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33315091/

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