zoukankan      html  css  js  c++  java
  • 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页左右
  • 相关阅读:
    眼睛的颜色 博弈
    codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
    10 25日考试 数学题目练习 斐波拉契 打表
    线段树 模板
    榨取kkksc03 luogu1855 dp 裸二维费用背包
    低价购买 洛谷1108 codevs4748 dp
    [转] 经典排序算法
    [USACO08DEC] Trick or Treat on the Farm
    [NOIP2009] 靶形数独(搜索+剪枝)
    各种蒟蒻模板【如此简单】
  • 原文地址:https://www.cnblogs.com/Kobe10/p/6491221.html
Copyright © 2011-2022 走看看