gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:18:32 26 4
gpt4 key购买 nike

我尝试构建一个使用 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 子类)具有无法从与它们相关联的线程之外的其他线程调用的函数。这就是为什么您遇到关于 QSocketNotifier 的第一个错误。
  • 您不能从一个线程创建一个 QObject 并给它一个与另一个线程关联的父对象。这是你的第二个错误。

关于c++ - QSocketNotifier : Socket notifiers cannot be enabled or disabled from another thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41671279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com