我如何使用一个QObject在这两个的QThread和mainthread以免“glibc的检测双重释放或腐败(fasttop):”?
-
22-09-2019 - |
题
我有一个使用UDP套接字,以写入和在一个循环读取数据报的QThread。该QUdpSocket提供在mainthread创建。如何处理的QObject,我将在这两个的QThread和mainthread使用。也就是它确定有UDP套接字在mainthread和在的QThread使用它?
解决方案
通常你应该只允许一个线程来处理每个QObject的。在这种情况下,你可能会想有你的QThread持有和使用该QUdpSocket提供,并且主线程,就永远触摸它(理想情况下,主线程甚至不应该持有一个指向QUdpSocket提供,只是要确定你永远不忘记时,不慎从错误的线程调用一个方法就可以了)。
当您的QThread读取一些数据UDP,它可以做在其上的任何初始处理,然后将数据传送到经由的QApplication()主线程事件后::或经由排队信号/槽连接。
同样,如果你的主线程有一些数据,它希望作为UDP分组而被送出,它不应该调用write()直接在QUdpSocket提供对象上;相反,它应通知的QThread(通过事件后()或排队信号),并让的QThread处理它。
不隶属于 StackOverflow