请教下linux中关于sleep()函数的问题
大家好,我现在想利用线程做一个定时器的小程序:
我的代码如下:
- C/C++ code
#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;}问题是:我在子线程中使用usleep(),然后在主线程中也用睡眠函数sleep()的时候,这时程序就死掉了,请问下为什么!
我的编译命令是: gcc timer.c -o timer -lpthread
[解决办法]
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);
}
timeArg是局部变量,createTimer退出后就没了,另一个线程却还在用它的地址(已经无效了)