QThread和QTcpServer是一个很好的选择
QThread and QTcpServer is that a good choice?
这是我在这里的第一个帖子,我会尽量解释好我的问题,不要犹豫纠正我,因为我是一个初学者。
我使用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()。创建一个插槽来处理你的数据并将其连接到那个信号上。您还应该处理其他情况,包括错误处理信号和处理连接/断开连接状态。
相关文章:
- 在 C++11 中利用 int*_t、int_fast*_t 和 int_least*_t 之间的差异的一个很好的例子是
- 对于短字符串来说,这是一个很好的哈希函数吗?
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- 将libstdc 静态链接起来是一个很好的做法
- 对于这个特定用例来说,一个很好的排序算法
- 一个很好的支持 c++ 联合的替代方案
- 有没有一个很好的通用方法来用ruby包装swig生成的类
- boost asio和c++11是一个很好的匹配
- 这是"mutable" C++的一个很好的用例吗?
- 一个很好的向量散列函数
- 将类的std::vector作为同一类的属性是一个很好的设计选择
- 一个很好的例子说明了如何使函数primitve param const导致编译器优化
- 一个很好的算法来获得元素的闲置组合
- std::move(*this)是一个很好的模式吗?
- 是否有一个很好的方法找到两个变量的模数使用SSE?(没有SVML)
- 一个很好的免费IDE,安装在Windows上的Boost
- 一个很好的c++编程环境,适用于Mac OS X
- c++中计算sha-256的一个很好的库
- 基类的单元测试是一个很好的方法
- 有一个很好的测试c++优化编译器