主线程没有return a.exec()下,次线程使用信号槽的方法

1. 需求点

        例如mfc程序,或者有些程序主线程已经被隐藏。这时候,如果我们在次线程使用qt的信号槽(例如使用Qtcpserver),那么信号槽是无法响应的。

2. 原因

        信号槽要存储入事件队列后,在事件循环(一般是main函数的return a.exec())执行时,才可能响应。但是主线程因为没有事件循环,所以槽函数无法响应。

        而且我们也不能在主线程执行return a.exec()。因为这句几乎就是个死循环。

3.  解决方法

        QThread的解决方法我没有找到。但是使用std::thread的方法我试验成功了(windows,linux的线程api也类似)。在线程入口函数(假定命名为funEntrance)的初始,要创建QCoreApplication a;。在funEntrance的结尾要调用a.exec();即可。

4. 其它

qt官方论坛forum.qt.io比较给力。我在上面提的问题都有比较热心的回应。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值