日期:2014-05-16 浏览次数:20738 次
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> typedef void (*timeoutCallBack)(void); struct timerStruct{ int time_ms; timeoutCallBack timeoutcallback; }; typedef struct timerStruct timer_t2; int timerStartFlag; void *timer_thread(void *arg) { timer_t2 *timeArg=(timer_t2*)arg; int time=timeArg->time_ms; time*=1000; printf("flag is %d\n",timerStartFlag); while(timerStartFlag) { usleep(time); if(timeArg->timeoutcallback) timeArg->timeoutcallback(); } } void timerStop() { timerStartFlag=0; } void createTimer(int time_ms,void(*callback)(void)) { timer_t2 timeArg; timeArg.time_ms=time_ms; timeArg.timeoutcallback=callback; pthread_t timeid; timerStartFlag=1; pthread_create(&timeid, NULL, &timer_thread, (void *)&timeArg); } void timeoutProc(void) { printf("timeout\n"); } int main(void) { int i; createTimer(100,timeoutProc); while(1) { for(i=0;i<10000000;i++); ///只是为了测试 //sleep(10); /// 为什么这里使用了sleep(10);,定时器就死掉了, } return 0; }