我在不使用Qt的不同DLL項目中封裝了使用Qt的libcommuni。據我所知,我需要運行Qt消息泵(通過QCoreApplication
)以確保網絡,信號等正常工作。但是,我遇到了一些解決如何做到這一點的問題。元帥調用Qt主線程
基本上,我想旋轉一個DLL中的線程,該線程調用QCoreApplication::exec()
並抽取所有Qt事件。然後我想將外部調用編組到Qt主線程的不同線程中,這樣我就可以安全地使用libcommuni。
它看起來像推薦的方法是使用信號和插槽,但我一直無法得到這個工作。我在通過DLL調用的QObject
類上創建一個信號,並將它連接到運行Qt消息泵的QThread
上的一個插槽。但是,如果在連接信號和插槽時指定Qt::QueuedConnection
,則發出信號時不會傳送消息。如果我完全省略了Qt::QueuedConnection
,那麼該槽將在調用線程上立即調用,而不是在Qt主線程中調用。
我也試過在DLL線程上明確調用QCoreApplication::postEvent()
來發送事件給Qt主線程,但event(QEvent)
永遠不會在目標QThread
中調用。
任何想法,我在做什麼錯在這裏?我猜測我不太瞭解Qt的線程模型。