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

请问上linux中关于sleep()函数的有关问题

2012-09-07 
请教下linux中关于sleep()函数的问题大家好,我现在想利用线程做一个定时器的小程序:我的代码如下:C/C++ co

请教下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退出后就没了,另一个线程却还在用它的地址(已经无效了)

热点排行