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线程的新方法QObject::moveToThread

昨晚在一个邮件列表里面看见一个关于在线程种使用signal/slot的讨论,由于回复太多,这里就不贴出原文了。         主要是关于怎样从一个线程发送信号到另外一个线程的问题。其实这个也不...

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

在那里他提出了一种新的使用QThread的方式,其实也不算是信了,据说qt 4.4就已经有了。那就是QObject::moveToThread。根据QT的asstant的描述,moveToThread...

一种使用QThread线程的新方法QObject::moveToThread(自己测试过的源代码)

下面的代码是在上一篇的基础之上写的简单的测试,无实际意义,仅仅是为了证明这种方法。需要注意的是1、在主线程中的connect只有是直接调用object中的slot函数时,object中的slot函数才...

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

近日研究qt的多线程,对于线程之间的tongx

QThread的用法:开启与退出

QThread有两种用法,一、用moveToThread()将功能类移入到线程QThread中,这个用法可以参照这篇博客:http://blog.csdn.net/lynfam/article/det...
  • newyher
  • newyher
  • 2016年11月16日 19:03
  • 5414

Qt下QThread用法学习之多线程

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

QThread用法总结

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

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

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

Qthread用法详解

原文 http://blog.sina.com.cn/s/blog_7c05cb370101bprl.html 我在线程类(继承QThread)里面用了一个QTimer,并有一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QThread的一种用法(转载)
举报原因:
原因补充:

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