QT学习之多线程

    • 【为什么要用多线程?】

      传统的图形用户界面应用程序都只有一个执行线程,并且一次只执行一个操作。如果用户从用户界面中调用一个比较耗时的操作,当该操作正在执行时,用户界面通常会冻结而不再响应。这个问题可以用事件处理和多线程来解决。

    • Linux有线程的概念吗?】

      传统的UNIX系统也支持线程的概念,但一个进程里只允许有一个线程,这样多线程就是多进程。Linux下的Posix线程(pthreads)是一种轻量级的进程的移植性实现,线程的调度由内核完成,每个线程都有自己的编号。如果使用线程,总体消耗的系统资源较少,线程间通信也比较容易,在工程中推荐使用线程。

    • 【使用多线程有什么好处?】

      1. 提高应用程序的响应速度。这对于开发图形界面程序尤其重要,当一个操作耗时很长时(比如大批量I/O或大量矩阵变换等CPU密集操作),整个系统都会等待这个操作,程序就不能响应键盘、鼠标、菜单等操作,而使用多线程技术可将耗时长的操作置于一个新的线程,从而避免上述问题。
      2. 使多CPU系统更加有效。当线程数不大于CPU数目时,操作系统可以调度不同的线程运行于不同的CPU上。
      3. 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为独立或半独立的运行部分,这样有利于程序的理解和

    • 【QT的简单多线程
      • 简单实现:qt的多线程和java有着类似的地方:也是start和run两个函数执行。先是创建多个线程对象,每个对象中都会有一个run函数(运行程序),我们直接循环的调用start函数进行启动每个对象线程,这样就能实现多线程了。
      • 代码示例:
        View Code
        View Code

    • 【多线程的互斥方法
      • QT为多线程的互斥和同步机制提供了几个类,掌握好这几个类对于互斥和同步机制理解应该不是难事。
        • 首先我们对互斥和同步机制必须有一定的了解,并且对于他们两个相关的一些常用名称必须知道是什么意思。(这些东西在操作系统中应该都有介绍)

      • QMutex类:对互斥量进行处理
        • 对互斥量进行处理,保护临界区的代码(利用lock和unlock进行上锁解锁操作,trylock操作尝试解锁)

      • QMutexLocker类
        • 简化互斥量的处理,在构造函数中接受一个QMutex对象并且将其锁定,在析构函数中进行解锁。这样就实现了锁的自动化处理,不用担心解锁问题(类似java)

      • 信号量   Qsemaphore类
        • 信号量可以获取多次,而互斥量只能锁定一次,信号量一般用来保护一定数量的同种资源(一个存储区的蛋糕数量(生产者消费者问题--环形缓冲区))
        • 这个问题操作系统这么课上已经讲过很多次原理了,所以这里直接上代码了。
        • 信号量实例:
          View Code
      • 线程等待与唤醒机制    QWaitCondition
        • 允许线程在一定的条件下唤醒其他线程
        • 代码实例:
          View Code



    • 【多线程应用
      • 代码太长,不变贴出,见书本:421页左右
原文地址:https://www.cnblogs.com/Kobe10/p/6491221.html