线程退出死锁的问题解决

来源:互联网 发布:淘宝描述不符怎么申诉 编辑:程序博客网 时间:2024/05/01 19:50

在开发可视门禁项目时,在点击退出按钮,退出视频播放时,经常假死,程序卡住不动。

程序的情况是这样的,因为次线程不能直接操作主线程GUI进行画图等操作,所以我们中间用了qt的阻塞信号槽去实现,也就是次线程发出画图动作的信号,主线程的槽函数执行画图动作,主线程画图完成后,次线程才能继续执行,所以这里有个阻塞的过程。另外一个地方,当QT主线程的某控件出发后,主线程向次线程发出stop信号,然后主线程调用pthread_join等待次线程退出,这里也有个阻塞过程。而次线程接到stop信号后,并不是马上退出,可能还会向主线程发出画图动作的信号。所以问题就来了,假如主线程向次线程发出stop信号,次线程接收到信号后还会发最后一张图片,而主线程此时因为调用pthread_join已经挂起,无法执行画图,而次线程一直等待主线程画图结束才会继续退出,因此,两条线程就杠上了,谁也不动。临时的解决办法就只是通过判断,不发最后一张图片。

原创粉丝点击