我正在修改用Qt編寫的大型項目,當某些請求到來時會產生qthreads。這些線程中的每一個都寫入一個在主線程中創建並連接到服務器的QTcpSocket。從多個線程訪問QTcpSocket
線程類具有對QTcpSocket的引用。當需要寫入它時,套接字將寫入數據並調用waitForBytesWritten,然後返回。
線程然後等待一個條件,直到readyRead信號從套接字發出。
插座上的訪問受互斥鎖保護。
對我來說,問題是我看到很多「QSocketNotifier:無法從其他線程啓用或禁用套接字通知程序」警告。這是因爲我從另一個線程寫入套接字(套接字已經在主線程中創建)。
我知道最好的解決方案應該是使用信號和插槽來寫和讀,但不幸的是項目非常複雜,我沒有時間來改變這種行爲。
我該怎麼辦?
不應該太難去除直接使用'QTcpSocket'實例並使用相反的信號/插槽。編譯器將向您顯示所有需要用生成的編譯錯誤進行更改的地方。 –
您有多個線程會鎖定互斥鎖,寫入套接字,等待回覆然後解鎖互斥鎖 - 是否正確?如果是這樣,它確實聽起來好像代碼使用的線程模型是根本錯誤的。這個代碼已經在工作,你必須修改它,或者它基本上都是新代碼。 –