QSocketNotifier:不能从另一个线程启用或禁用套接字通知程序



我尝试使用QT构建一个多线程游戏服务器,因此,每个客户端都是基于独立线程的"QThread".现在我需要将数据发送到同一游戏室中的其他客户端(在其他线程中)。 例如,当房主关闭游戏室时,游戏服务器需要向其他客户端发送"room_closed"消息,这些客户端在同一 soom 中, 但是有一个错误:

QSocketNotifier:无法从 启用或禁用套接字通知程序 另一个线程

ps:我尝试使用sinals/插槽,但仍然有一个错误:

QObject:无法为位于不同位置的父项创建子项 线。(父是QNativeSocketEngine(0x161764e8),父的线程是 ClientThread(0x16196f10),当前线程是 QThread(0x14a17278)

我该怎么办?

看来你没有正确处理QObjects和QThreads,Qt抱怨它。

我建议你看看Qt文档:

  • 线程和 QObject
  • Q弹出线程亲和性

快速指南:

  • QObject 的每个实例都与一个 QThread ( QObject::thread() ) 相关联。
  • 您可以使用 QObject::moveTothread() 更改其关联的线程,但 QObject 不能具有父线程,并且必须从当前与 QObject 关联的线程进行调用。
  • 某些 QObject(os 子类)具有无法从与其关联的线程以外的其他线程调用的函数。这就是为什么你有关于QSocketNotifier的第一个错误。
  • 不能从线程创建 QObject 并为其指定与另一个线程关联的父线程。这是你的第二个错误。

你叫QTcpSocket::write in multiple therads。我解决了信号/插槽的问题。

最新更新