0

我有一个使用 udp 套接字在循环中写入和读取数据报的 qthread。QUDPSocket 在主线程中创建。如何处理将在 QThread 和主线程中使用的 QObject。也可以在主线程中使用 UDP 套接字并在 qthread 中使用它吗?

4

1 回答 1

2

通常,您应该只允许一个线程处理每个 QObject。在这种情况下,您可能希望您的 QThread 持有并使用 QUDPSocket,并且主线程永远不会接触它(理想情况下,主线程甚至不应该持有指向 QUDPSocket 的指针,以确保您永远不会忘记并意外地从错误的线程调用它的方法)。

当您的 QThread 读取一些 UDP 数据时,它可以对其进行任何初始处理,然后通过 QApplication::postEvent() 或通过排队的信号/插槽连接将数据传递给主线程。

同样,如果您的主线程有一些数据希望作为 UDP 数据包发送出去,它不应该直接在 QUDPSocket 对象上调用 write();相反,它应该通知 QThread(通过 postEvent() 或排队信号)并让 QThread 处理它。

于 2010-02-24T23:15:51.700 回答