gpt4 book ai didi

C : How to pause sigaction Timer

转载 作者:太空宇宙 更新时间:2023-11-04 02:14:06 25 4
gpt4 key购买 nike

有一个函数叫做 test(),我想每 30 秒调用一次这个函数,请找到我实现的代码片段。

void init_sigaction(void) {
struct sigaction act;
act.sa_handler = test; //test()
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
sigaction(SIGPROF, &act, NULL);
}


void init_time(void) {
struct itimerval val;
val.it_value.tv_sec = 30; //Timer 30 Seconds
val.it_value.tv_usec = 0;
val.it_interval = val.it_value;
setitimer(ITIMER_PROF, &val, NULL);
}

int main()
{
/*Set the handler for the signal SIG to HANDLER */
signal(SIGINT, signal_handler);
init_sigaction();
init_time();

Some_other_function();

}

现在我正在使用一些其他函数,我想暂停 sigaction 计时器直到其他函数执行。如何实现暂停中断?

谢谢,

最佳答案

来自manual page setitimer:

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

使用零次调用 setitimer,并使用有效的 old_value 参数来存储计时器的当前值,以便稍后再次启动它。

编辑:

这样的事情怎么样:

struct itimerval old_timer;

void pause_timer()
{
struct itimerval zero_timer = { 0 };
setitimer(ITIMER_PROF, &zero_time, &old_timer);
}

void resume_timer()
{
setitimer(ITIMER_PROF, &old_timer, NULL);
}

注意以上代码未经测试,仅通过阅读手册页进行编码。

关于C : How to pause sigaction Timer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10086778/

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