首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux的定时器实现有关问题

2012-09-13 
linux的定时器实现问题大家好,我想实现这样的定时器:1,可以随时的开启,2,可是随时的关闭,3,等开启后如果超

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做定时器,谢谢.

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

热点排行