• 定时器


    定时器
    每当一段时间到时后,定时器将向进程发送超时通知,于是进程可以执行预定的动作,例如刷新屏幕或者内存回收,因此定时器具有非常广泛的应用,是典型的基础组件。
    linux系统提供了和间隔定时器(interval timer)相关的两个系统调用,通过他们可以在一个进程内部实现多个间隔定时器。需要注意的是,linux为应用进程只提供了
    一个定时器(间隔定时器),因此如果一个应用要使用多个定时器,则需要自己实现并进行管理。

    //interval.c
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/time.h>
    #include<signal.h>
    /* 倒计时设置,重复到时,超时值设为1秒*/
    struct itimerval val_alarm={.it_interval.tv_sec=1,
    .it_interval.tv_usec=0,
    .it_value.tv_sec=1,
    .it_value.tv_usec=0
    };
    /*SIGALRM信号处理函数*/
    void sig_handler(int sig)
    {
        printf("time has expired,elapsed %d second.
    ",val_alarm.it_value.tv_sec);
    }
    int main()
    {
        struct sigaction sa;
        memset(&sa,0,sizeof(sa));
        sa.sa_handler=&sig_handler;
        if((sigaction(SIGALRM,&sa,NULL))==1)
            perror("failed to call sigaction");
        /*使用初始化val_alarm的值启动定时器*/
        if((setitimer(ITIMER_REAL,&val_alarm,NULL))==-1)
            perror("failed to call sigaction");
        while(1);
        //getchar();用这个也可以的,和while同样的后果的!
        return 0;
    }
    
    
    运行结果如图:每隔一秒打印出一条信息。


    程序第8~11行将间隔定时器的超时值设为1秒,并且设置为反复启动模式。程序第15~18行定义超时处理程序,并且在第24~27行进行注册。程序第30行启动该定时器,随后
    定时器每隔1秒超时,定时器的超时处理程序打印出相关的信息。
  • 相关阅读:
    ffmpeg中的数据结构(AVFormatContext)
    string转wstring
    Bento4
    根据代码结构和注释生成接口文档
    IOS摄像头采和显示
    git主分支覆盖子分支
    Nginx 面试 40 连问,快顶不住了
    数据库日期类型字段设计,应该如何选择
    java各种输入输出流
    android 之 linkToDeath和unlinkToDeath。(死亡代理)
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/4447445.html
Copyright © 2020-2023  润新知