QT程序调试(资源死锁问题)

最近动手在师兄写的一个小的QT界面上添加了一点小的框架,在调试的过程中程序会crash,找了很久的原因,终于找到的问题的存在,在这里记录一下,以防止以后会碰到类似的情况!

问题:程序crash的地方调试显示 Resource Deadlock,原因在于整个程序同时运行了两个线程,其中一个是图形界面MainWindow的线程,另一个则是定义的接收数据的线程,在图形界面中有一个按钮StopButton,它对应的信号连接着槽stop();而在recv当中如果接收的数据出错则也会调用stop()函数,这样就有一个问题了,当你手动点击图形界面的时候会出发信号,因此调用stop()函数;而这时候如果接收函数没有接收到相应长度的数据包时同样会调用到stop()函数。在stop函数当中有对线程的join()以及delete操作,因此当重复调用stop()的话就会对创建的线程进行两次join()以及delete(事实上程序只执行到join这一步就挂掉了),因此造成了资源死锁的问题。


解决办法:

    (1)在stop()函数里加锁

    (2) 或者设置一个状态量,在start()函数中设置状态量m_run=ture,只有在m_run为真的时候才执行stop()函数中的操作,同时将m_run置为false,这样就保证了stop()函数不会被同时执行两次。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值