找回密码
 立即注册
收起左侧

Qt子线程

5
回复
6156
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2019-3-26 14:25:51 显示全部楼层 |阅读模式
1Qter豆
在Qt 多线程编程中,有时有这样的需求:
        我在ui上会有对数据库的增删查改操作,操作无论是否耗时,我都将它当作耗时操作处理,我希望这部分耗时操作可以由子线程完成。但是Qt的子线程run的设计,通常执行完毕后都是退出的(run函数执行到末尾),假如我将ui线程的增删查改动作用信号与槽的方式与子线程连接,那么,我如何将4种操作对应到一个run里?依靠子线程槽函数传递特殊的键值吗?亦或者子线程可否有类似消息队列的东西,可以阻塞,收到特定消息后解析再处理。请问遇到这样的情况我该用怎样的模式去开发!


最佳答案

回复

使用道具 举报

累计签到:882 天
连续签到:3 天
2019-3-26 14:25:52 显示全部楼层
moveToThread
回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2019-3-26 18:28:17 显示全部楼层
线程池 ?
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2019-4-1 07:06:23 显示全部楼层
我也刚学到这里,使用qt5的线程函数函数的话,可以写多个函数,但同时只能把一个函数作为线程函数而已,那么你在不同的操作可以使用信号和槽来指定你启动的是哪一个函数作为线程的处理函数!
回复

使用道具 举报

累计签到:181 天
连续签到:1 天
2019-4-1 07:08:43 显示全部楼层
如果需要说,子线程执行完了,再来做其他的数据操作的话,不知道可不可以在子线程对象中设置标志位,在主线程中检查这个标志位,如果执行完了true,则继续其他操作,返回结果也可以通过emit发射出去。。
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2019-4-10 17:16:49 显示全部楼层
这个事情最后是这么处理的,专门创建了一个应用程序类用来处理增删查改操作,Ui类创建应用类的对象,并将该对象movetothread,UI对象使用信号和槽的方式与应用对象交互,这样既满足我的需求,也很好的实现了逻辑界面分离。我个人觉得还是不错的解决方案。3楼回答的算是最贴近的,分虽不多,给3楼吧。其他楼的小伙伴们也非常感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了