当前位置:  技术问答>linux和unix

定时器问题--setitimer 求助

    来源: 互联网  发布时间:2016-02-01

    本文导语:  #include  #include  #include  #include  #include  bool bTimeOver = false; void set_timer() {         struct itimerval itv, oldtv;         itv.it_interval.tv_sec = 5;         itv.it_interval.tv_usec = 0;         itv.it_value.tv_sec = ...

#include 
#include 
#include 
#include 
#include 

bool bTimeOver = false;

void set_timer()
{
        struct itimerval itv, oldtv;
        itv.it_interval.tv_sec = 5;
        itv.it_interval.tv_usec = 0;
        itv.it_value.tv_sec = 0;
        itv.it_value.tv_usec = 0;

        setitimer(ITIMER_PROF,&itv,oldtv); 
}

void sigalrm_handler(int sig)
{
        bTimeOver = true;
        printf("timer signal.. %dn", count);
}

void init_sigaction(void) 

       struct sigaction act; 
       act.sa_handler=sigalrm_handler; 
       act.sa_flags=0; 
       sigemptyset(&act.sa_mask); 
       sigaction(SIGPROF,&act,NULL); 


int main()
{
        init_sigaction;
        set_timer();
        while (!bTimeOver)
        {}
        exit(0);
}

这是通用的处理定时器的程序,请各位测试一些,时间到是bTimeOver = true,但为什么在main函数中调不出while循环?

在跟踪的时候发现定时器到时bTimeOver 会被置位true,但是就是跳不出while循环,请问是那个地方的问题,还是setitimer的用法没有对,请大家测试一下这个程序是否是我说的一样?

|
你设置错了.

tv.it_interval.tv_sec = 5;                 //经过多成时间后重新设定settime()
itv.it_interval.tv_usec = 0;
itv.it_value.tv_sec = 0;                  //设定的时间,你设成0当然不行啦,改成其他值就可以了
itv.it_value.tv_usec = 0;

|
看上去是gcc优化导致的问题,估计你编译时有加入-O1/-O2之类的选项,你可以通过gcc -O2 -S 的方式看汇编代码,我在Red Hat Linux 9.0上看到的是对应的代码优化后会有问题。

修改方法有几种,直最接的一种是直接将bTimeOver加上修饰符volatile以避免gcc做不应该的优化。

|
乖乖, 居然敢用KDevelop ... ...
这种东西也能用? 还不如直接Makefile搞定

|
关注。。。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux 多个定时器 几乎同时到时 , 部分定时器信号 丢失的问题.
  • 定时器的问题请教
  • Linux用户态可以通过同一段程序创建多个定时器么?
  • 请问如何实现多个并行的定时器?
  • 想做个定时器,不知道怎么做?
  • Jquery定时器的简单示例
  • 请问linux下的定时器怎么使用??******************************
  • 定时器如何销毁?
  • linux 定时器销毁
  • 请教关于unix中定时器的语法
  • linux中的串口通信判断一帧数据是否传输完整时,用定时器检查前后两帧数据的间隔时间,该用什么定时函数,有详细代码最好,谢谢!
  • tcp重传定时器,怎么实现的啊?
  • Linux 提供的基于文件描述符的定时器接口
  • 如何实现多定时器?
  • linux下如何设置高精度定时器?
  • linux定时器!
  • 定时器与getchar()的问题??奇怪!
  • 多定时器问题
  • 关于select定时器的问题
  • 定时器问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3