我有一个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 - 在C程序中释放(int **类型)时发生双重空闲或损坏消息程序
- 2. *** glibc的检测***双重释放或腐败(fasttop):
- 3. Ruby/Glibc coredump(双重释放或损坏)
- 4. LInux中的C socket编程,双重免费损坏(fasttop)错误
- 5. 动态分配的数组,双重空闲或损坏
- 6. 双免费()或损坏:C++
- 7. 当使用FreeTDS ODBC与pyodbc时,glibc检测到损坏的双链表
- 8. Linux 3.0:“检测到glibc”中止 - 调整检测到的损坏功能?
- 9. 如何调试“glibc检测*** python:malloc():内存损坏”
- 10. 双免费或腐败(fasttop)错误
- 11. PipedInputStream - 如何避免“java.io.IOException:管道损坏”
- 12. 使用线程和互斥锁时出现双重空闲或损坏(!prev)错误
- 13. 检测到堆栈损坏
- 14. 检测到堆损坏
- 15. 检测到堆损坏| C++
- 16. 如何检测Javascript空闲?
- 17. 如何同步这些线程以避免数据损坏?
- 18. MySQL的重新启动导致双免费或损坏使用MySQL的C API
- 19. 双重释放或腐败(fasttop)
- 20. 我可以在属于mainthread的QThread中使用waitForReadyRead吗?
- 21. 检测图像是否损坏或损坏
- 22. glibc检测到免费()无效指针
- 23. 当调用新关键字C++时,Glibc检测到malloc()内存损坏(0xb6179bb8)
- 24. 从检测到的glibc中优雅地退出 - malloc():内存损坏
- 25. QObject :: deleteLater跨QThread
- 26. 如何检测或避免使用std :: shared_ptr的循环引用?
- 27. 如何在上传后检测损坏或崩溃的图像
- 28. 如何在javascript/jquery中使用webworker来检测空闲时间?
- 29. 任何方式来检测QObject是否属于“死”QThread?
- 30. 检测或避免在编译时
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