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

本文介绍了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屋!

你可能感兴趣的:(qt,c++)