• 7216阅读
  • 4回复

[讨论]关于QThread与主线程通信的正确使用方法 [复制链接]

上一主题 下一主题
离线电动游星
 

只看楼主 倒序阅读 楼主  发表于: 2015-05-06
比如我现在有一个写数据下载网络文件的耗时操作,用QThread来保持UI线程响应
以下几个对QThread的使用方案,哪个更好(安全性,便捷性等方面)?
(1)子类化QThread,重新实现它的run函数,把这个操作放到run函数中,run函数中处理完成后用该Thread发射信号通知主线程
(2)子类化QThread,在其中定义一个槽函数slot();在slot()中完成该耗时操作,在Thread的构造函数中调用moveToThread(this);然后在slot()中发射信号通知主线程
(3)定义一个QObject的子类,在在其中定义一个槽函数slot()和一个通知信号;在slot()中完成该耗时操作,在主线程中new一个QThrea,对Object调用moveToThread(辅助线程),然后连接信号和槽,在该slot()末尾发射信号通知主线程
================================================================================
或者除了用信号和槽机制之外,还有没有什么与主线程通信的方法?
离线foruok

只看该作者 1楼 发表于: 2015-05-08
自定义事件也可以通信哦。
我的博客:http://blog.csdn.net/foruok
我的微信订阅号:程序视界
离线电动游星

只看该作者 2楼 发表于: 2015-05-08
回 foruok 的帖子
foruok:自定义事件也可以通信哦。 (2015-05-08 08:38) 

用postEvent?
离线stlcours

只看该作者 3楼 发表于: 2015-05-09
>>(1)子类化QThread,重新实现它的run函数,把这个操作放到run函数中,run函数中处理完成后用该Thread发射信号通知主线程

不用通知主线程,直接把更新UI的内容写成TThread的槽函数,与finish信号连接,就行了。这种方法我使用快1年了,没发现有什么问题。
离线电动游星

只看该作者 4楼 发表于: 2015-05-09
回 stlcours 的帖子
stlcours:>>(1)子类化QThread,重新实现它的run函数,把这个操作放到run函数中,run函数中处理完成后用该Thread发射信号通知主线程
不用通知主线程,直接把更新UI的内容写成TThread的槽函数,与finish信号连接,就行了。这种方法我使用快1年了,没发现有什么问题。 (2015-05-09 20:52) 

也行,因为写成QThread槽函数,而QThread本身就是在UI线程中的,所以该槽函数也就会在UI线程中执行
快速回复
限100 字节
 
上一个 下一个