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

QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread

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

QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread

ps:我尝试使用sinals/slots,但仍然出现错误:

QObject: Cannot create children for a parent that is in a different thread. (Parent is QNativeSocketEngine(0x161764e8), parent's thread is ClientThread(0x16196f10), current thread is QThread(0x14a17278)

我该怎么办?

您似乎没有正确处理 QObjects 和 QThreads,Qt 抱怨它。

我建议你看一下 Qt 文档:

快速指南:

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

您在多个线程中调用了 QTcpSocket::write。我用 signal/slot.

解决了这个问题