当前位置: 技术问答>linux和unix
linux的定时器实现问题
来源: 互联网 发布时间:2017-03-13
本文导语: 大家好,我想实现这样的定时器: 1,可以随时的开启, 2,可是随时的关闭, 3,等开启后如果超时了则调用我的超时处理函数! 我的实现思路是这样的: 创建一个线程,让他一直循环,用一个标志位检测退出,在...
大家好,我想实现这样的定时器:
1,可以随时的开启,
2,可是随时的关闭,
3,等开启后如果超时了则调用我的超时处理函数!
我的实现思路是这样的:
创建一个线程,让他一直循环,用一个标志位检测退出,在循环体中不断的读取系统时间,根据系统时间差来计算是否超时,等超时了,调用超时处理函数。
代码如下:
1,可以随时的开启,
2,可是随时的关闭,
3,等开启后如果超时了则调用我的超时处理函数!
我的实现思路是这样的:
创建一个线程,让他一直循环,用一个标志位检测退出,在循环体中不断的读取系统时间,根据系统时间差来计算是否超时,等超时了,调用超时处理函数。
代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
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