问题描述
我正在尝试制作一个可以使用 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 (将#修改为@)