Linux之定时器学习笔记(timer_create)

1在Linux中,timer_create 是一个用于创建定时器的系统调用。它允许你创建一个POSIX定时器,用于在未来的某个时间点触发信号或执行回调函数。

例如:

my_time.h

#ifndef _SELF_TIMER_H_
#define _SELF_TIMER_H_
#include <unistd.h>
#include <signal.h>
#include <time.h>

typedef  struct sigevent   SIG_EVENT;
typedef  struct itimerspec ITIMER_SPEC;

class Timers{
    public:
        Timers();
        ~Timers();
        void set_timer(SIG_EVENT,ITIMER_SPEC);
        void create_timer();
        void destory_timer();
    public:
        typedef void (*TimerHandler)(union sigval);
    private:
        TimerHandler       m_handle;
        timer_t            m_timer;
        SIG_EVENT          m_sev;
        ITIMER_SPEC        m_its;
};

#endif

my_time.cpp

#include "self_timer.h"
Timers::Timers(){}
Timers::~Timers(){}
void Timers::set_timer(SIG_EVENT sev,ITIMER_SPEC its)
{
    if(sev.sigev_notify == SIGEV_THREAD){
        m_sev.sigev_notify_function = sev.sigev_notify_function; // 处理函数
    }
    else if(sev.sigev_notify == SIGEV_SIGNAL){   
        m_sev.sigev_signo = sev.sigev_signo; // 要发送的信号编号,提前注册对应的信号的处理函数
    }

    // 创建定时器
    m_sev.sigev_notify              =  sev.sigev_notify;
    m_sev.sigev_value.sival_ptr     =  &m_timer; 
    m_sev.sigev_notify_attributes   =  sev.sigev_notify_attributes;
    // 设置定时器参数
    m_its.it_interval.tv_sec    =  its.it_interval.tv_sec;   // 定时器间隔:x秒
    m_its.it_interval.tv_nsec   =  its.it_interval.tv_nsec;
    m_its.it_value.tv_sec       =  its.it_value.tv_sec;      // 第一次触发时间:x秒后
    m_its.it_value.tv_nsec      =  its.it_value.tv_nsec;
}


void Timers::create_timer()
{
    timer_create(CLOCK_REALTIME, &m_sev, &m_timer);
    timer_settime(m_timer, 0, &m_its, NULL);
}

void Timers::destory_timer()
{
    // 销毁定时器
    timer_delete(m_timer);
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值