c++ - QThread 和 QTcpServer 是一个好的选择吗?

标签 c++ multithreading qt qtcpserver

这是我在这里的第一篇文章,我会尽力解释我的问题,请不要犹豫,纠正我,因为我是初学者。

我正在使用 Qt 设计一个 GUI 来控制 3D 引擎。 Qt 和 3D 引擎使用 QTcpserver 一起交谈。 我可以向 3D 引擎发送命令,如“移动对象”或“列出场景中的对象”,引擎会响应。

目前存在两个问题: 1)当服务器响应时,我不知道这是来自“移动”功能还是“列表”功能的响应。我在 GUI 上解析启动事件的答案,但这不是一个合适的解决方案。 2) 在发送命令之前,我调用了阻塞主线程的 waitForReadyRead 函数。 这就是我在这里发帖的原因。

我想到了一个解决方案:一个线程,其中包含命令列表和下一个要调用的函数的指针。当我单击一个 UI 按钮时,它会将命令发送到带有正确函数指针的列表,线程将尝试清空列表并将命令发送到服务器。

但我真的不知道这是否是解决我问题的好方法。 我对 QTcpServer 和 QThread 了解不多,我阅读了很多文章,其中将它们一起用于处理多个客户端连接,但这对我没有帮助。

我没有在这里发布代码,因为我不认为我的问题是“代码相关”,但如果你问我,我会很乐意这样做。

感谢您为我指明了正确的方向。

最佳答案

QTcpSocket 上的操作被设计为异步的。不要试图将它用作同步对象——这不是此类的设计方式。当然,您可以创建一个单独的线程在那里进行处理,但是简单地通过套接字发送命令并不能保证线程的开销。

http://qt-project.org/doc/qt-5/qabstractsocket.html

查看发出的信号,包括来自 QIODevice 的 readyRead()。创建一个插槽来处理您的数据并将其连接到该信号。您还应该处理其他情况,包括错误处理信号和处理连接/断开状态。

关于c++ - QThread 和 QTcpServer 是一个好的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22461687/

相关文章:

c++ - 将 qt dll 链接到多个可执行文件

image - 如何在 QML 中添加和使用资源?

linux - 可以从 Qt 运行程序但不能从 konsole 运行它

c++ - 对运算符<< 的 undefined reference

multithreading - 如何处理存储库的多线程单元测试来模拟并发?

java - Windows 中的 JNI 未注册函数

multithreading - 线程池与线程生成

php - Linux 的 cron 是异步的还是同步的?

c++ - C++17模板参数中auto的优点

c# - 适用于 Mac 和 Windows 的音频框架