请问上linux中关于sleep()函数的有关问题
请教下linux中关于sleep()函数的问题
大家好,我现在想利用线程做一个定时器的小程序:
我的代码如下:
问题是:我在子线程中使用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退出后就没了,另一个线程却还在用它的地址(已经无效了)
大家好,我现在想利用线程做一个定时器的小程序:
我的代码如下:
- 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退出后就没了,另一个线程却还在用它的地址(已经无效了)