【OpenCV与Qt5】多线程【1Qt中的多线程方法】

Qt有多种方法处理多线程,QThread 类用来处理所有与多线程有关功能,在本单元中我们会看到,它是Qt中最强大,最灵活的多线程处理手段。除了QThread, Qt还提供了其它命名空间、类及函数帮助我们实现多线程的需求。以下一一列举出:

  • QThread: 这是Qt中所有与线程相关的类的基础。它可以被子类化来创建新线程,你需要重写(override) run 方法,另一种方式是创建它的一个实例,调用moveToThread把Qt object移到新线程中去。
  • QThreadPool: 它用来管理线程,通过重用现存的线程减少线程创建的消耗。每个Qt应用都有一个全局QThreadPool实例,可通过QThreadPool::globalInstance()来访问。它与QRunnable类一同使用来控制、管理、回收可执行object。
  • QRunnable:它提供了另一种创建线程的方法,它是所有Qt runnable object的基础。与QThread不同,QRunnable不是QObject的子类,你需要子类化它并且重写run方法才能使用QRunnable,如前述,QRunnable的实例由QThreadPool管理。
  • QMutex QMutexLocker QSemaphore QWaitCondition QReadLocker QWriteLocker QWriteLocke:这些类处理线程之的同步任务。在某些场景下使用这些类能够避免线程间覆盖计算,线程试图读写一次只能处理一个线程的设备等问题。通常要手动管理这些问题。
  • QCuncurrent:这个命名空间允许调用高层API创建多线程任务。无须处理互斥、信号量和线程同步问题。
  • QFuture, QFutureWatcher, QFututeIterator, QFutureSynchronizer: 这些类与QtConcurrent一同使用,处理多线程和异步操作结果。

总的来说,Qt中有两种多线程的方法,第一种是基于QThread,这个low-level的方式提供了灵活的方式来处理多线程。然而,有很多方法可以减少使用QThread的工作量,我们后续会加以介绍。第二种方式是基于QtConcurrent命名空间的,这是一种high-level的方式,用于在应用中创建多线程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值