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

用timer设置时钟,并没有产生我预期的计时结果.为什么呢?

    来源: 互联网  发布时间:2017-02-06

    本文导语:  本帖最后由 panclinux 于 2012-02-27 11:58:01 编辑 我写了个小程序,设置一个2秒钟的计时器,每隔两秒产生一次计时信号,打印出"Caught"语句。主程序sleep 10秒钟,期间一共打印5次计时信号。 代码如下。 创建两个timer。 ...

本帖最后由 panclinux 于 2012-02-27 11:58:01 编辑
我写了个小程序,设置一个2秒钟的计时器,每隔两秒产生一次计时信号,打印出"Caught"语句。主程序sleep 10秒钟,期间一共打印5次计时信号。
代码如下。

创建两个timer。
结果是第一个timer每个2秒响应一次,没有问题
第二个timer每个5秒响应一次,结果第5s钟的时候,进程崩溃了:
Real-time signal 1


#include
#include
#include
#include
#include
void handler(int sig,siginfo_t*,void*){
        if(sig==SIGRTMIN){printf("Caught %dn",sig);}
        else if(sig==SIGRTMIN+1){
        }
}
timer_t createTimer(int sig, double secs){
        sigevent sev;
        timer_t timerid;
        sev.sigev_notify=SIGEV_SIGNAL;
        sev.sigev_signo =sig;
        sev.sigev_value.sival_ptr=&timerid;
        if(timer_create(CLOCK_REALTIME,&sev,&timerid)==-1)return 0;
        
        long freq_nanosecs=(long)secs*1000000000;
        itimerspec its;
        its.it_value.tv_sec    =freq_nanosecs/1000000000;
        its.it_value.tv_nsec   =freq_nanosecs%1000000000;
        its.it_interval.tv_sec =its.it_value.tv_sec;
        its.it_interval.tv_nsec=its.it_value.tv_nsec;

        if(timer_settime(timerid,0,&its,NULL)==-1)return 0;
        return timerid;
}
int main(void){
        struct sigaction sa;
        sa.sa_flags=SA_SIGINFO;
        sa.sa_sigaction=handler;
        sigemptyset(&sa.sa_mask);
        if(sigaction(SIGRTMIN,&sa,NULL)==-1)return 1;

        createTimer(SIGRTMIN,2);
        createTimer(SIGRTMIN+1,5);
        int left=10;
        do{left=sleep(left);}while(left>0);
        return 0;
}

|
每一个timer需要一个单独的handler函数,信号处理的时候如果有重入,会造成系统失败。

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












  • 相关文章推荐
  • java命名空间java.util类timer的类成员方法: timer定义及介绍
  • asp.net中System.Timers.Timer的例子
  • java命名空间javax.management.timer类timer的类成员方法: stop定义及介绍
  • C#中定时器System.Timers.Timer类的例子
  • java命名空间javax.management.timer类timer的类成员方法: removeallnotifications定义及介绍
  • 在编写驱动程序的时候,timer处理中,遇到了其他某timer处理例程以外的代码的执行。请指点,各位
  • java命名空间javax.management.timer类timer的类成员方法: getnbnotifications定义及介绍
  • C#中使用System.Timers.Timer定时器控件的例子
  • java命名空间javax.management.timer类timer的类成员方法: postderegister定义及介绍
  • 关于__mod_timer函数(linux/kernel/timer.c中定义的)的问题
  • java命名空间javax.management.timer类timer的类成员方法: isempty定义及介绍
  • C#中Timer的简单范例(System.Windows.Forms.Timer)
  • java命名空间javax.management.timer类timer的类成员方法: one_day定义及介绍
  • Applet中定时用线程定时,还是用Timer定时比较好????
  • java命名空间javax.management.timer类timer的类成员方法: one_hour定义及介绍
  • java.util中的Timer和TimerTask类
  • java命名空间javax.management.timer类timer的类成员方法: one_minute定义及介绍
  • 有关timer_list结构的问题
  • java命名空间javax.management.timer类timer的类成员方法: prederegister定义及介绍
  • 如何注册Timer中断
  • java命名空间javax.management.timer类timer的类成员方法: one_second定义及介绍
  • C# Timer类的简单例子


  • 站内导航:


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

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

    浙ICP备11055608号-3