QThread的一种用法(转载)

转载 2015年07月08日 17:12:14

(原链接地址)http://windrocblog.sinaapp.com/?p=967


GUI线程不应该执行长时间的程序,以免界面卡死无法响应。耗时较长的程序可以在其他线程执行,并与GUI线程交互。Qt中界面应该只出现在主线程中,其他任务则可以放到子线程。

1. 我的方法

我在项目中使用QObject::moveToThread这种方式实现多线程,将多线程与应用逻辑区分开,无需继承QThread类,无需改写QThread::run方法,现有的逻辑代码可以很方便地使用进来(仅需继承QObject类,加入一些信号与槽)。项目中我参照网上的一篇博文:

从文章开头提到的文档中可知,QObject::moveToThread方法中的QThread是持续运行的,任务对象执行完成时所在的工作线程不会停止。我将工作线程的start信号与任务相联系,仅在工作线程启动时执行程序。当再一次执行runTask方法时,工作进程没有停止,就无法用start信号执行下一次任务。对此,我在任务SshTask执行结束时终止线程运行,需要更多的信号与槽。修改版如下:

只允许一个任务运行,首先判断线程是否在运行,任务结束时强制终止线程。方法很繁琐,代码不优雅。

2. QThread文档中推荐的方法

Qt文档中对线程的详细介绍:《Threading Basics》。文中就是否使用多线程,以及何种方式实现多线程给出详细的介绍。

QThread文档中有此种方法的例子:

QThread文档中给出的方法就没有上面的问题,任务Worker运行不受工作线程workerThread控制,由管理对象Controller的operate信号开启,这样就可以重复多次调用Worker任务。子线程在Controller生命周期内一直运行,但我还没用到项目中,不知道怎样才能保证只有一个任务运行,最近试一下能否同时进行多个任务。

参考

Threading Basics 

翻译版: Qt 线程基础(QThread、QtConcurrent等)


举报

相关文章推荐

一种使用QThread线程的新方法QObject::moveToThread

转:http://blog.csdn.net/sydnash/article/details/7425947 昨晚在一个邮件列表里面看见一个关于在线程种使用signal/slot的讨论,...

Qthread用法详解

原文 http://blog.sina.com.cn/s/blog_7c05cb370101bprl.html 我在线程类(继承QThread)里面用了一个QTimer,并有一...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

QThread用法学习及多线程同步(一)

非常好的博文:Qt 线程基础(QThread、QtConcurrent等) http://blog.csdn.net/dbzhang800/article/details/6554104 Q...

QThread用法总结

在Qt4.3(包括之前版本)Qt中多线程的QThread类中run()方法是一个纯虚函数,所以在使用QThread使用时需要子类化一个Thread,通过实现run()方法来达到在新线程中运行所需操作的...

QThread的用法:开启与退出

QThread有两种用法,一、用moveToThread()将功能类移入到线程QThread中,这个用法可以参照这篇博客:http://blog.csdn.net/lynfam/article/det...

Qt下QThread用法学习之多线程

本文参考了http://mobile.51cto.com/symbian-272733_1.htm和http://mobile.51cto.com/symbian-268690_1.htm两篇好文章,...

C语言中va(可变函数参数) 的另一种用法与危险事项

C语言中的可变参数va(va_arg) 大家应该比较熟悉了,主要是用来解决函数参数类型与个数不确定的问题,基本用法与详细请移步这里。 通常的用法是把va_arg放在等号右边,提取其值来使用: ...

Driver Attributes/Device Attributes 及作为linux的一种读写接口的用法(timed_output实例)

(1)Driver Attributes struct driver_attribute { struct attribute attr; ssize_...

Driver Attributes/Device Attributes 及作为linux的一种读写接口的用法(timed_output实例)

(1)Driver Attributes struct driver_attribute { struct attribute attr; ssize_t...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)