当前位置: 代码迷 >> QT开发 >> 求Qt 在以次应用场景中使用线程或者异步或者其他实现方式的思路
  详细解决方案

求Qt 在以次应用场景中使用线程或者异步或者其他实现方式的思路

热度:57   发布时间:2016-04-25 03:30:00.0
求Qt 在以下应用场景中使用线程或者异步或者其他实现方式的思路
现在在做一个程序,需要连接远程数据库,由于远程数据库并不是特别稳定,所以经常会出现因长时间等待处理结果而造成gui界面假死现象。所以我在考虑是否使用线程或者异步来解决这个问题。

现在思路如下:例如登录过程
当点击登录按钮后,gui出现正在登录的字样以及loading图标,同时后台去数据库取详细信息,当数据返回后,将数据返回到login界面,在做一步处理,报错或者登录成功之类。

问题就在这了。我已经如何处理这个逻辑?
同时,该程序每隔一段时间就会轮训数据库一次,发送最新入库的数据等

目前我的思路如下:
自定义一个消息队列,当有数据操作的时候,将数据(sql文)传入该队列里面,固定数据查询也是产生数据sql文放到该队列里面。遵循先进先出机制。(队列有固定长度)。
新启新的线程不停的处理队列里面的内容,处理完毕后发送处理结果发送到发布这条消息的类中,并删除该消息。

问题1:这样的思路是否能解决问题?有没有什么风险?
问题2:如何将结果返回到相对应的gui界面,或者怎么处理?
问题3:有没有其他思路解决?

ps:我之前都是做bs软件的,比较习惯ajax之类的回调函数。做c++经验不是很多,所以c++如何这个方面的处理?


------解决方案--------------------
问题1:这样的思路是否能解决问题?有没有什么风险?
可以解决,很正常的做法,没什么风险,就是对线程同步等要有比较深入的理解

问题2:如何将结果返回到相对应的gui界面,或者怎么处理?
qt下吗,无疑是信号槽的方式了,线程将结果发送给gui槽函数,注意同步异步的区别,和memory的申请释放等

问题3:有没有其他思路解决?
已经是很正常的解决思路了。只是需要考虑一些队列消息是否可以重复等等问题,如正在固定数据查询(可能持续很久),是否需要在队列里再塞一个固定数据查询。这个需要结合你的具体应用和需求了
  相关解决方案