QSocketNotifier:不能从另一个线程启用或禁用套接字通知程序
QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread
我尝试使用QT构建一个多线程游戏服务器,因此,每个客户端都是基于独立线程的"QThread".现在我需要将数据发送到同一游戏室中的其他客户端(在其他线程中)。 例如,当房主关闭游戏室时,游戏服务器需要向其他客户端发送"room_closed"消息,这些客户端在同一 soom 中, 但是有一个错误:
QSocketNotifier:无法从 启用或禁用套接字通知程序 另一个线程
ps:我尝试使用sinals/插槽,但仍然有一个错误:
QObject:无法为位于不同位置的父项创建子项 线。(父是QNativeSocketEngine(0x161764e8),父的线程是 ClientThread(0x16196f10),当前线程是 QThread(0x14a17278)
我该怎么办?
看来你没有正确处理QObjects和QThreads,Qt抱怨它。
我建议你看看Qt文档:
- 线程和 QObject
- Q弹出线程亲和性
快速指南:
- QObject 的每个实例都与一个 QThread (
QObject::thread()
) 相关联。 - 您可以使用
QObject::moveTothread()
更改其关联的线程,但 QObject 不能具有父线程,并且必须从当前与 QObject 关联的线程进行调用。 - 某些 QObject(os 子类)具有无法从与其关联的线程以外的其他线程调用的函数。这就是为什么你有关于QSocketNotifier的第一个错误。
- 不能从线程创建 QObject 并为其指定与另一个线程关联的父线程。这是你的第二个错误。
你叫QTcpSocket::write in multiple therads。我解决了信号/插槽的问题。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- C++套接字客户端到 Python 服务器未创建连接
- 在不知道套接字的情况下关闭网络连接
- C++套接字对不读/写父/子
- 非更新套接字消息
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- QSocketNotifier:不能从另一个线程启用或禁用套接字通知程序
- 使用Berkeley套接字的线程通知