QT学习之多线程

    • 【为何要用多线程?】java

      传统的图形用户界面应用程序都只有一个执行线程,而且一次只执行一个操做。若是用户从用户界面中调用一个比较耗时的操做,当该操做正在执行时,用户界面一般会冻结而再也不响应。这个问题能够用事件处理和多线程来解决。linux

    • Linux有线程的概念吗?】多线程

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

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

      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页左右
相关文章
相关标签/搜索