随笔分类 - qt_thread
多线程编程
摘要:在gemfield的《从pthread到QThread》一文中我们了解了线程的基本使用,但是有一大部分的内容当时说要放到这片文章里讨论,那就是线程的同步问题。关于这个问题,gemfield在《从进 程到线程》中有一个比喻,有必要重新放在下面温习下: *************************
阅读全文
摘要:使用线程 基本上有种使用线程的场合: 通过利用处理器的多个核使处理速度更快。 为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程。 何时使用其他技术替代线程 开发人员使用线程时需要非常小心。启动线程是很容易的,但确保所有共享数据保持一致很难。遇到问题往往很难解决,这是由于
阅读全文
摘要:QSocketNotifier 用来监听系统文件操作,将操作转换为Qt事件进入系统的消息循环队列。并调用预先设置的事件接受函数,处理事件。 一共存在3类事件:read,write,exception. QSocketNotifier::Read 0 There is data to be read.
阅读全文
摘要:一、QThreadPool类 QThreadPool管理一组线程。它负责管理和回收单个QThread对象以减少程序中线程创建的开销。每个Qt应用程序都有一个全局的QThreadPool对象,可通过方法globalInstance()获得。为了调用QThreadPool中的一个线程,需要提供一个从QR
阅读全文
摘要:QFuture<T>run(constClass *object,T(Class::*fn)(Param1,Param2,Param3,Param4,Param5)const,constArg1 &arg1,constArg2 &arg2,constArg3 &arg3,constArg4 &arg
阅读全文
摘要:最佳线程数:性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加。这个阀值我们认为是最佳线程数。为什么要找最佳线程数1.过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助2...
阅读全文
摘要:问题概述单核CPU的计算机上,多线程能够提高程序运行的性能吗?这个问题看起来简单,实际很复杂,设计到多方面的因素.首先我们要把概念搞清楚,那就是什么是性能?一般来说,我们把运行一个任务所花的时间来评价性能,所花的时间可以是在CPU上,也可能是在I/O操作上,运行任务的程序,也可能同时在运行另外若干的...
阅读全文
摘要:前面我们已经详细介绍过有关线程的一些值得注意的事项。现在我们开始对线程做一些总结。有关线程,你可以做的是:在QThread子类添加信号。这是绝对安全的,并且也是正确的(前面我们已经详细介绍过,发送者的线程依附性没有关系)不应该做的是:调用moveToThread(this)函数指定连接类型:这通常意...
阅读全文
摘要:前面两个章节我们从事件循环和线程类库两个角度阐述有关线程的问题。本章我们将深入线程间得交互,探讨线程和QObject之间的关系。在某种程度上,这才是多线程编程真正需要注意的问题。现在我们已经讨论过事件循环。我们说,每一个 Qt 应用程序至少有一个事件循环,就是调用了QCoreApplication:...
阅读全文
摘要:希望上一章有关事件循环的内容还没有把你绕晕。本章将重新回到有关线程的相关内容上面来。在前面的章节我们了解了有关QThread类的简单使用。不过,Qt 提供的有关线程的类可不那么简单,否则的话我们也没必要再三强调使用线程一定要万分小心,一不留神就会陷入陷阱。事实上,Qt 对线程的支持可以追溯到2000...
阅读全文
摘要:现代的程序中,使用线程的概率应该大于进程。特别是在多核时代,随着 CPU 主频的提升,受制于发热量的限制,CPU 散热问题已经进入瓶颈,另辟蹊径地提高程序运行效率就是使用线程,充分利用多核的优势。有关线程和进程的区别已经超出了本章的范畴,我们简单提一句,一个进程可以有一个或更多线程同时运行。线程可以...
阅读全文
摘要:线程互斥多线程运行时,通常会访问同一个变量,同一个数据结构,或者同一段代码。因此,需要使用互斥技术来保护上述资源,确保多线程执行的正确性。注:我们通常说某个函数是线程安全的,也就是因为该函数实现加入了线程互斥保护。4.1、QMutexQMutex( RecursionModemode= NonRec...
阅读全文
摘要:线程之间共享数据,但又单独执行; QT线程QThread是平台无关的;通常主线程从main开始执行,而在主线程中创建其他线程,其他线程派生于QThread;1、线程优先级总共8个优先级:线程优先级从上到下越来越高。ConstantValueDescriptionQThread::IdlePriori...
阅读全文
摘要:本文主要内容:在任务一中,用 四 种方式实现:点击界面按钮,开线程运行一段程序,结果显示在一个Label上。1. 用不正确的方式得到看似正确的结果2. 用Qt Manual 和 例子中使用的方法3. 用一种好用但被Qt开发人员批判的方法4. 用一种被开发人员强烈推荐,但Qt Manual和例子中只字...
阅读全文
摘要:本文讲述的是在Qt中QThread使用方法,QThread似乎是很难的一个东西,特别是信号和槽,有非常多的人(尽管使用者本人往往不知道)在用不恰当(甚至错误)的方式在使用QThread,随便用google一搜,就能搜出大量结果出来。无怪乎Qt的开发人员 Bradley T. Hughes 声嘶力竭地...
阅读全文
摘要:http://blog.csdn.net/lefttime/article/details/5717349作为Qt类中少有的基类, QRunnable提供了简洁有效的可运行对象的创建. 用QRunnable来创建独立的运行对象来运行 不涉及界面元素的数据处理过程 非常合适.优点: 创建过程简洁, 使...
阅读全文
摘要:先来给出每个文件的相关代码然后再加以分析Cpp代码//*************dialog.h**************//#ifndefDIALOG_H#defineDIALOG_H#include#defineMAXSIZE5//最大的线程数classQDialogButtonBox;cla...
阅读全文
摘要:QMutex类提供了一种保护一个变量和一段代码的方法。mutex.lock() //锁住互斥量(mutex)。如果互斥量是解锁的,那么当前线程就立即占用并锁定它。否则,当前线程就会被阻塞,知道掌握这个互斥量的线程对它解锁为止。mutex.unlock()//解锁mutex.tryLock()//尝试...
阅读全文
摘要:QT通过三种形式提供了对线程的支持。它们分别是,一、平台无关的线程类,二、线程安全的事件投递,三、跨线程的信号-槽连接。这使得开发轻巧的多线程Qt程序更为容易,并能充分利用多处理器机器的优势。多线程编程也是一个有用的模式,它用于解决执行较长时间的操作而不至于用户界面失去响应。在Qt的早期版本中,在构...
阅读全文