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

关于Qt多线程的一些问题

5
回复
9132
查看
[复制链接]
累计签到:37 天
连续签到:1 天
来源: 2017-6-6 13:46:55 显示全部楼层 |阅读模式
1Qter豆
请教,我使用moveToThread()这种方法来使用多线程的,使用方法大概是这样:
MyObject *obj = new MyObject();
QThread *thread

obj->moveToThread(thread);
这个obj里面的槽函数就是在thread线程里面执行,但是普通函数依然是在主线程中执行的。。。。
有没有方法是,将obj对象moveToThread之后,obj的所有操作都是在新线程中执行?

回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2017-6-6 16:52:41 显示全部楼层
百度一发,这个问题网上有贴别多的帖子哦~~~
回复

使用道具 举报

累计签到:25 天
连续签到:1 天
2017-6-8 09:37:32 显示全部楼层
obj->moveToThread(thread);
thread在主线程中,对象在子线程中执行。
回复

使用道具 举报

累计签到:37 天
连续签到:1 天
2017-6-9 08:56:53 显示全部楼层
Since 发表于 2017-6-6 16:52
百度一发,这个问题网上有贴别多的帖子哦~~~

嗯嗯,我百度过,也看过官方文档...感觉还是没找到答案,网上说moveToThread这种方法是槽函数和普通函数都在新线程中执行,但是在VS中显示普通函数是在主线程中执行的,可能是我调用方法错误了?
回复

使用道具 举报

累计签到:37 天
连续签到:1 天
2017-6-9 08:59:40 显示全部楼层
dearcc 发表于 2017-6-8 09:37
obj->moveToThread(thread);
thread在主线程中,对象在子线程中执行。

我是在主线程中执行了obj->normalFun(),我以为直接调用对象的普通函数,这个普通函数会在新线程中执行......但是看来好像不是这样,我想问的就是,如何在主线程中调用obj对象的普通函数且让这个普通函数在thread线程中执行
回复

使用道具 举报

累计签到:25 天
连续签到:1 天
2017-6-9 10:28:34 显示全部楼层
星辰大海 发表于 2017-6-9 08:59
我是在主线程中执行了obj->normalFun(),我以为直接调用对象的普通函数,这个普通函数会在新线程中执行.. ...

函数的执行一定是在调用对象所在的线程中执行的,你这样直接掉肯定是成功不了的!
还是要靠obj->moveToThread(thread);
再之后,从调用线程中emit一个信号,到接收线程中去触发对应的你要调用的函数,这样的话,函数就在线程中执行了,信号不能直连。
回复

使用道具 举报

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

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