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

时间:2017-01-16 07:19:23

标签: c++ multithreading qt sockets qthread

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

  

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

ps:我尝试使用sinals / slots,但仍有错误:

  

QObject:无法为不同的父级创建子级   线。 (Parent是QNativeSocketEngine(0x161764e8),父亲的主题是   ClientThread(0x16196f10),当前线程为QThread(0x14a17278)

我该怎么办?

2 个答案:

答案 0 :(得分:1)

似乎你没有正确处理QObjects和QThreads而且Qt抱怨它。

我建议你看一下Qt文档:

快速指南:

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

答案 1 :(得分:-1)

您调用了QTcpSocket :: write多个therads。我用信号/插槽解决了这个问题。