我有一個qthread使用udp套接字在循環中寫入和讀取數據報。 QUDPSocket在mainthread中創建。我如何處理QThread和mainthread中使用的QObject。也可以在mainthread中使用UDP套接字並在qthread中使用它?如何在qthread和mainthread中使用QObject以避免「glibc檢測到雙重空閒或損壞(fasttop):」?
0
A
回答
2
通常你應該只允許一個線程來處理每個QObject的。在這種情況下,您可能希望讓QThread保持並使用QUDPSocket,並且主線程不會觸及它(理想情況下,主線程甚至不應該持有指向QUDPSocket的指針,只是爲了確保您永遠不會忘記和不小心從錯誤的線程調用它的方法)。
當您的QThread讀取一些UDP數據時,它可以對其進行任何初始化處理,然後通過QApplication :: postEvent()或通過排隊信號/槽連接將數據傳遞到主線程。
同樣,如果你的主線程有一些數據,它希望作爲一個UDP數據包被髮送出去,它不應該直接調用QUdpSocket提供對象的write();相反,它應該通知QThread(通過postEvent()或排隊信號)並讓QThread處理它。
相關問題
- 1. Glibc錯誤:雙重空閒或損壞
- 2. 我的編碼器中的雙重空閒或損壞(fasttop)
- 3. *** glibc檢測到*** ./shell:雙重空閒或損壞(頂部)---中止(核心轉儲)
- 4. C++錯誤:雙重空閒或損壞(fasttop)
- 5. 在C++中使用遞歸方法時發生雙重空閒或損壞(fasttop)
- 6. 錯誤:*** glibc的檢測到*** W5:雙重釋放或腐敗(fasttop):
- 7. 檢測到glibc - 在C程序中釋放(int **類型)時發生雙重空閒或損壞消息程序
- 8. Ruby/Glibc coredump(雙重釋放或損壞)
- 9. *** glibc的檢測***雙重釋放或腐敗(fasttop):
- 10. 執行free()時出錯說「glibc檢測到雙免費或損壞」
- 11. LInux中的C socket編程,雙重免費損壞(fasttop)錯誤
- 12. glibc檢測到雙免費或腐敗
- 13. C++:glibc檢測到損壞的雙鏈表:0x08f8f148
- 14. 動態分配的數組,雙重空閒或損壞
- 15. Glibc損壞的雙鏈表
- 16. 雙免費()或損壞:C++
- 17. OpenMP中的雙重空間或損壞
- 18. 當使用FreeTDS ODBC與pyodbc時,glibc檢測到損壞的雙鏈表
- 19. glibc檢測smallbin鏈表損壞
- 20. 的Java Glassfish的4個崩潰, 「雙自由或損壞(fasttop)」
- 21. *** ./a.out錯誤:雙重空閒或損壞(!prev):0x096fb008 ***中止(核心轉儲)
- 22. Linux 3.0:「檢測到glibc」中止 - 調整檢測到的損壞功能?
- 23. 雙人免費或損壞:C++
- 24. axtls ssl_client_new雙倍免費或損壞
- 25. 如何調試「glibc檢測*** python:malloc():內存損壞」
- 26. PipedInputStream - 如何避免「java.io.IOException:管道損壞」
- 27. 雙重免費或數據結構中的損壞
- 28. 避免在ansi中損壞SD卡C
- 29. 雙免費或腐敗(fasttop)錯誤
- 30. 使用線程和互斥鎖時出現雙重空閒或損壞(!prev)錯誤
Thx。只有問題剩下的是我在哪裏instanciate我的變量。例如,我使用帶有readDatagram函數的QByteArray,然後我需要將這個QByteArray的內容填充到我所做的結構中。我在哪裏實例化這些結構,以便我可以將它們分配到Qthread中,並最終從主線程中讀取它們? – 2010-02-24 23:27:40
我認爲最簡單,最安全的方法是做在的QThread以下的的QThread已經閱讀一個UDP包後: 的QByteArray myByteArray(的sizeof(MYSTRUCT),0); struct MyStruct * structToFill =(struct MyStruct *)myByteArray.data(); structToFill-> someDataField = 5; //或任何數據傳到這裏 [...] emit myStructReceived(myByteArray); //通過排隊信號 告訴主線程這樣做,這樣避免了內存泄漏的任何機會,等 – 2010-02-24 23:38:31
所以我絕對需要通過信號發送的數據或可他們只是駐留在QThread的對象,並進行訪問來自兩個線程。 (當然,他們絕不會同時訪問相同的數據) – 2010-02-25 00:08:43