我尝试使用 QT 构建一个多线程游戏服务器,因此,每个客户端都是一个基于“QThread”的独立线程。现在我需要将数据发送到同一游戏室中的其他客户端(在其他线程中)。例如,当房主关闭游戏房间时,游戏服务器需要向同一 soom 中的其他客户端发送“room_close”消息,但出现错误:
QSocketNotifier:无法启用或禁用套接字通知程序
另一个线程
ps:我尝试使用信号/槽,但仍然出现错误:
QObject:无法为位于不同位置的父级创建子级
线。 (父级是 QNativeSocketEngine(0x161764e8),父级线程是
ClientThread(0x16196f10),当前线程是QThread(0x14a17278)
我应该怎么办?
看来你没有正确处理 QObjects 和 QThreads 并且 Qt 对此抱怨。
我建议你看一下Qt文档:
- 线程和 QObject http://doc.qt.io/qt-5.7/threads-qobject.html
- QObject线程亲和性 http://doc.qt.io/qt-5/qobject.html#thread-affinity
快速指南:
- QObject 的每个实例都与一个 QThread 关联(
QObject::thread()
).
- 您可以使用以下方法更改其关联的线程
QObject::moveTothread()
,但 QObject 不能有父级,并且必须从 QObject 当前关联的线程进行调用。
- 某些 QObject(os 子类)具有无法从与其关联的线程以外的其他线程调用的函数。这就是为什么你有关于 QSocketNotifier 的第一个错误。
- 您不能从线程创建 QObject 并为其提供与另一个线程关联的父级。这是你的第二个错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)