主線程沒有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比較給力。我在上面提的問題都有比較熱心的迴應。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章