恢复后定时器时间值不减少

问题描述

我正在尝试制作一个可以使用 itimer 暂停/恢复的计时器。

我发现 this stackoverflow 页面采用了建议的方法。我已经阅读了 linux man page,我也尝试过使用 getitimer 来保存计时器,但它仍然不起作用。

在下面的代码示例中,我为 d1、d2、d3 和 d4 得到 5000、4537、4537 和 4537,我试图得到类似 5000、4537、4536、4000 的结果。

有什么办法可以让定时器值在恢复后减少?

感谢您的建议,

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
#include <string.h>



struct itimerval old_timer;

void resume(){
    setitimer(ITIMER_REAL,&old_timer,NULL);
}

void pause(){
    struct itimerval zero_timer = { 0 };
    setitimer(ITIMER_REAL,&zero_timer,&old_timer);
}


void timer_handler(){
    puts("RING RING");
}

int main(){
    struct sigaction sa;
    memset(&sa,sizeof (sa));
    sa.sa_handler = timer_handler;
    sigaction(SIgalRM,&sa,NULL);

    old_timer.it_interval.tv_usec = 5000; 
    old_timer.it_interval.tv_sec = 0;
    old_timer.it_value.tv_usec = 5000;
    old_timer.it_value.tv_sec = 0;
    
    resume();
    long int d1 = old_timer.it_value.tv_usec;
    puts("delay1");

    pause();
    long int d2 = old_timer.it_value.tv_usec;
    for(int i=0; i<10; i++){ puts("delay2"); }


    resume();
    long int d3 = old_timer.it_value.tv_usec;
    for(int i=0; i<10; i++){ puts("delay3"); }

    long int d4 = old_timer.it_value.tv_usec;
    for(int i=0; i<10; i++){ puts("delay4"); }

    printf("%ld\n",d1);
    printf("%ld\n",d2);
    printf("%ld\n",d3);
    printf("%ld\n",d4);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)