LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2437|回复: 4

关于 pthread_cond_timedwait的应用问题

[复制链接]
发表于 2007-1-21 15:00:00 | 显示全部楼层 |阅读模式
代码如下:
pthread_cond_t WaitEvent;    //等待事件阻塞
        pthread_mutex_t Inuse;        //临时使用   
if(readKey(&Key)==0){
                return(Key);
        }
        else{               
                ts.tv_sec = time(NULL) + 5;
                printf("MainKeyboard:: get wait time\n");
                //pthread_mutex_lock(&Inuse);
                pthread_cond_timedwait(&WaitEvent,&Inuse,&ts);
                printf("MainKeyboard::get out time\n");
                if(readKey(&Key)==0){
                        printf("Onkey read Key OK :%d\n",Key);
                        //sem_post(&Sem_KeyboardEnable);
                    return(Key) ;
            }
                else{
                        printf("Onkey read Key Faulse \n");
                        //sem_post(&Sem_KeyboardEnable);
                    return(0);
                }
        }
另外一个线程:
int MainKeyboard::run(){
char Key;
        while(1){
                Key=OnKeyevent();//MainInterface.process();               
        writeKey(Key);
        pthread_cond_signal(&WaitEvent);
                printf("MainKeyboard::run send WaitEvert\n");
        }
}
其中OnKeyevent()读取一个阻塞型串口。
运行重出现的问题:没有在                pthread_cond_timedwait(&WaitEvent,&Inuse,&ts);地方挂起延时。一直向下执行。
请教什么问题?
发表于 2007-1-22 09:29:44 | 显示全部楼层
在调用pthread_cond_timedwait前先给自己加锁pthread_mutex_lock(&mymutex)
参见:http://www.ibm.com/developerwork ... pi/part3/index.html
回复 支持 反对

使用道具 举报

发表于 2007-1-22 10:30:15 | 显示全部楼层
其实主要的原因就是信号量锁默认声明的时候它的计数器的值是1,此时任何一个进程都可以获得此锁,所以你的程序不能阻塞。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-22 18:38:53 | 显示全部楼层

谢谢!

谢谢大家提供的信息。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-22 18:40:41 | 显示全部楼层

谢谢!

谢谢大家提供的信息。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表