QThread和QTcpServer是一个很好的选择

QThread and QTcpServer is that a good choice?

本文关键字:一个 很好 选择 QTcpServer QThread      更新时间:2023-10-16

这是我在这里的第一个帖子,我会尽量解释好我的问题,不要犹豫纠正我,因为我是一个初学者。

我使用Qt来设计一个GUI来控制3D引擎。Qt和3D引擎使用QTcpserver一起对话。我可以向3D引擎发送命令,比如"移动物体"或"在场景中列出物体",引擎会回答。

目前存在2个问题:1)当服务器响应时,我不知道这是否是来自"移动"函数或"列表"函数的响应。我将答案解析为GUI上的启动事件,但这不是一个合适的解决方案。2)在发送命令之前,我调用waitForReadyRead函数,它阻塞了主线程。这就是为什么我在这里发布。

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

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

我没有在这里发布代码,因为我认为我的问题与"代码相关",但如果你问我的话,我很乐意这样做。

谢谢你给我指了正确的方向。

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

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

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