的Qt 4.8,Windows XP中:QTimer,QThread的,和TCP消息
我有一個管理我的TCP報文,並打開/保存/關閉在適當的時候插座一個線程。
這個相同的線程啓動一個QTimer,200 ms,在我的線程數據中定義,它在我的線程類中抽取一個事件(如果)套接字打開。所以計時器和它的事件屬於線程,就我所瞭解的最好的想法。
QTimer超時事件通過屬於線程的端口發送TCP消息,它是這個特定硬件項目的保持活動消息。必須定期發送或設備「消失」,這是不行的。
當發送消息時,我得到這個錯誤:
「在QSocketNotifier:插座通知者不能從另一個線程啓用」
至於我可以告訴大家,我上午從發送消息相同的線程,並期望任何信號等,由它擁有/處理等。
誰能告訴我我在這裏失蹤了什麼?
PS:此消息被發送設備確實活着......它只是我在Qt的錯誤控制檯上得到這個運行時錯誤,我很擔心,有潛伏的內部問題因爲它。
消息不會在OS X 10.6下運行。我不知道爲什麼。
+1這個答案可能救了我的工作,不開玩笑!你能告訴我,如果這仍然在Qt5?另外,請您詳細說明文檔中描述的位置?謝謝! –
實際上,我發現QTimer不會繼承Qt5中線程父項的cotext(我不知道Qt4.x)。但是您必須確保QTimer與工作對象一起移動,方法是將其作爲工作者的子項或在新的上下文中創建它。看到這個有用的帖子:http://qt-project.org/forums/viewthread/21141 –