本文介绍了QSocketNotifier:套接字通知程序不能从另一个线程启用或禁用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
限时送ChatGPT账号..
我尝试构建一个使用QT的多线程游戏服务器,因此,每个客户端都是基于独立线程的"QThread".现在,我需要将数据发送到同一游戏室中的其他客户端(在其他线程中).例如,当房主关闭游戏室时,游戏服务器需要将"room_closed"消息发送给其他客户端,但消息却相同:
QSocketNotifier:无法从以下位置启用或禁用套接字通知程序 另一个线程
ps:我尝试使用正弦/插槽,但仍然存在错误:
QObject:无法为处于不同状态的父级创建子级 线. (父母是QNativeSocketEngine(0x161764e8),父母的线程是 ClientThread(0x16196f10),当前线程为QThread(0x14a17278)
我该怎么办?
推荐答案
似乎您不能正确处理QObjects和QThreads,而Qt对此有所抱怨.
我建议您看看Qt文档:
- 线程和QObject
- QObject线程亲和力
快速指南:
- 每个QObject实例都与一个QThread(
QObject::thread()
)相关联. - 您可以使用
QObject::moveTothread()
更改其关联的线程,但是QObject必须没有父对象,并且必须从与QObject当前关联的线程进行调用. - 某些QObject(os子类)具有无法从与其关联的线程之外的其他线程调用的函数.这就是为什么您遇到关于QSocketNotifier的第一个错误的原因.
- 您不能从一个线程创建QObject并为其提供与另一个线程关联的父对象.那是你的第二个错误.
这篇关于QSocketNotifier:套接字通知程序不能从另一个线程启用或禁用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!