热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用setitimer来定时

对于下面的演示代码,我们完全可以使用sighandler_tsignal(intsignum,sighandler_thandler);来替代sigaction。#include&
对于下面的演示代码,我们完全可以使用sighandler_t signal(int signum, sighandler_t handler);来替代sigaction。
#include
#include
#include
#include

using namespace std;

volatile static long counter = 0;

static void notify( int signum )
{
    assert( signum == SIGALRM );
    ++ counter;
}

static void wait( long timeout_ms )
{
    struct timespec spec;
  
    spec.tv_sec     = timeout_ms / 1000;
    spec.tv_nsec     = (timeout_ms % 1000) * 1000000;
    nanosleep( &spec, NULL );
}

int main( void )
{
    struct itimerval  tim_ticks;
    struct sigaction  act;
    struct sigaction  oldact;

    tim_ticks.it_value.tv_sec          = 0;
    tim_ticks.it_value.tv_usec         = 100;
    tim_ticks.it_interval.tv_sec     = 0;
    tim_ticks.it_interval.tv_usec     = 100;

    sigemptyset( &act.sa_mask );
    act.sa_flags                     = 0;
    act.sa_handler                     = notify;
   
    int res = sigaction( SIGALRM, &act, &oldact );
    if ( res )
    {
        perror( "Fail to install handle: " );
       
        return -1;
    }
   
    res = setitimer( ITIMER_REAL, &tim_ticks, 0 );
   
    if ( res )
    {
        perror( "Fail to set timer: " );
       
        sigaction( SIGALRM, &oldact, 0 );
       
        return -2;
    }
   
    for ( ; ; )
    {
        cout <<"counter = " <        wait( 10 );
    }
   
    return 0;
}

 

推荐阅读
author-avatar
潇洒树春不_970
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有