读书人

linux的定时器实现有关问题

发布时间: 2012-09-13 09:51:52 作者: rapoo

linux的定时器实现问题
大家好,我想实现这样的定时器:
1,可以随时的开启,
2,可是随时的关闭,
3,等开启后如果超时了则调用我的超时处理函数!

我的实现思路是这样的:
创建一个线程,让他一直循环,用一个标志位检测退出,在循环体中不断的读取系统时间,根据系统时间差来计算是否超时,等超时了,调用超时处理函数。
代码如下:

C/C++ code
#include <stdio.h>#include <time.h>#include <sys/time.h>#include <stdlib.h>#include <signal.h>#include <stdio.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/ioctl.h>#include <sys/time.h>int g_timerStartFlag;inline unsigned long get_time()  ///return ms;{    struct timeval tv = {0};    gettimeofday(&tv, 0);    return tv.tv_sec*1000+tv.tv_usec/1000;}int count;void *createTimer(void *arg){   int timecnt=0;    pthread_detach(pthread_self());        unsigned long lasttime=get_time();    while(g_timerStartFlag)   ///    {                     unsigned long nowtime;        nowtime=get_time();          if(nowtime-lasttime>=500)  ///500ms      {          printf("timeout------\n");          lasttime = nowtime;      }        }    fprintf(stderr,"break;");     return NULL;}void libck_createTimerAndStart(void){      pthread_t timeid;       g_timerStartFlag=1;       pthread_create(&timeid, NULL, &createTimer, NULL);  ////      }int main(){    int i;    libck_createTimerAndStart();    while(1)    {        for(i=0;i<1000000;i++);            }        return 0;}




可是这样做有个问题: 就是当我的别的程序如果频繁的开启定时器(同一时刻开多个,同一时刻关多个等等),那么就需要不断的创建定时器线程,关闭定时器,就需要不断的销毁线程,这样对系统很是消耗。
请问下有没有别的好方法,谢谢!


[解决办法]
请使用select+pipe做定时器,谢谢.

线程创建和销毁的开销就不用你操心了.

读书人网 >UNIXLINUX

热点推荐