关闭

linux下的定时器添加

标签: linux定时器time
50人阅读 评论(0) 收藏 举报
分类:

今天因为要在linux层做个定时器,用来当时间到的时候要保存一些数据。

在.h文件中:

#include <sys/time.h>

在类的私有申明中:

	static BOOL m_bNeedSaveRW;
	static timer_t timerId;
	static void createTimer(void);
    static void setTimer(int timeSec);
	static void callTimeFunc(union sigval v);
在.cpp文件中
BOOL
<pre name="code" class="cpp">BOOL <span style="font-family: Arial; font-size: 14px; line-height: 26px;">myclass </span><span style="font-family: Arial, Helvetica, sans-serif;">::m_bNeedSaveRW = TRUE; </span>
timer_t <span style="font-family: Arial; font-size: 14px; line-height: 26px;">myclass </span>::timerId = 0; 


void <span style="font-family: Arial; font-size: 14px; line-height: 26px;">myclass </span>::createTimer(void)
{
    struct sigevent sev;
    m_bNeedSaveRW = FALSE;
    memset(&sev, 0, sizeof(sev));
    sev.sigev_notify = SIGEV_THREAD;
    sev.sigev_value.sival_ptr = NULL;   //因为是静态变量,所以这个地方用不了this
    sev.sigev_notify_function = callTimeFunc; //这个是调用的函数

    /* create timer */
    if (timer_create (CLOCK_REALTIME, &sev, &timerId) == -1) 
    {
        printf("[RW]timer_create, error %s %d\n", __FILE__, __LINE__);
        return;
    }
    return;
}

void <span style="font-family: Arial; font-size: 14px; line-height: 26px;">myclass </span>::setTimer(int timeSec)
{
    struct itimerspec its;

    /* Start the timer */
    its.it_value.tv_sec = timeSec;  //设置时间的
    its.it_value.tv_nsec = 0;

    its.it_interval.tv_sec = 0;
    its.it_interval.tv_nsec = 0;

    if (timer_settime (timerId, 0, &its, NULL) == -1)
    {
        printf("[RW]timer_settime error %s %d\n", __FILE__, __LINE__);
    }
    return;
}

void <span style="font-family: Arial; font-size: 14px; line-height: 26px;">myclass </span>::callTimeFunc(union sigval v)
{ 
    //v.sival_ptr 就是创建timer时传进来的指针,最后在合适的地方删除一下timer
    if(m_bNeedSaveRW == FALSE)
    {
        printf("delete the time %s %d\n", __FILE__, __LINE__);
        timer_delete(timerId);
        m_bNeedSaveRW = TRUE;
    }
    printf("save the RW %s %d\n", __FILE__, __LINE__);
    SystemCmd("sync");
    SAVE_RW_PARTITION();
}

以后直接调用两个函数就可以了。

想知道其他的具体的可以看:http://www.ccvita.com/508.html

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:724次
    • 积分:51
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:4篇
    • 译文:1篇
    • 评论:0条
    文章存档