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的用法

概述       QThread类提供了一个与平台无关的管理线程的方法。一个QThread对象管理一个线程。QThread的执行从run()函数的执行开始,在Qt自带的QThread类中,run()函...
  • t46414704152abc
  • t46414704152abc
  • 2016年08月06日 19:08
  • 6426

如何正确使用QThread

以代码解释了QThread的正确用法,并提示了其中的一个小坑。
  • nirendao
  • nirendao
  • 2016年05月31日 23:40
  • 2654

Qt之QThread用法

QThread类提供了与系统无关的线程。 QThread代表在程序中一个单独的线程控制。线程在run()中开始执行,默认情况下,run()通过调用exec()启动事件循环并在线程里运行一个Qt的事件...
  • swartz_lubel
  • swartz_lubel
  • 2017年02月07日 22:53
  • 1721

Qthread用法详解

原文 http://blog.sina.com.cn/s/blog_7c05cb370101bprl.html 我在线程类(继承QThread)里面用了一个QTimer,并有一...
  • luopeiyuan1990
  • luopeiyuan1990
  • 2015年05月17日 18:52
  • 1924

怎样正确的使用QThread类

背景描述: 以前,继承 QThread 重新实现 run() 函数是使用 QThread唯一推荐的使用方法。这是相当直观和易于使用的。但是在工作线程中使用槽机制和Qt事件循环时,一些用户...
  • zhenwo123
  • zhenwo123
  • 2014年11月06日 18:10
  • 1006

解析Qt中QThread使用方法

 原文来自:http://mobile.51cto.com/symbian-268690.htm 解析Qt中QThread使用方法 本文介绍了Qt中QThread...
  • NewThinker_wei
  • NewThinker_wei
  • 2014年03月30日 13:26
  • 4510

QThread 使用探讨

QThread 使用探讨 2010-10-23 00:30 注意:本文停止更新,请优先考虑 Qt 线程基础(QThread、QtConcurrent等) dbzh...
  • chinabinlang
  • chinabinlang
  • 2014年06月30日 11:47
  • 20775

[Qt C++] QThread的正确用法

不知不觉,从对线程一无所知,到接触了java(实现runnable接口),linux(调用pthread_create创建一个线程,做一些事情),C++ STL中的多线程(直接新建一个进程,做一些事情...
  • ZJU_fish1996
  • ZJU_fish1996
  • 2017年02月23日 17:30
  • 1006

QThread多线程编程经典案例分析

QT QThread多线程编程的方法一直有个争议,就是Bradley T. Hughes:You’re doing it wrong 归纳为3中方法优劣问题:...
  • hustyangju
  • hustyangju
  • 2014年01月04日 11:05
  • 2121

QThread中的事件循环

参考资料 [1]Qt线程和定时器
  • Q1302182594
  • Q1302182594
  • 2015年12月29日 09:11
  • 1507
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QThread的一种用法(转载)
举报原因:
原因补充:

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