Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • Q QtWiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Create a new issue
  • Jobs
  • Issue Boards
Collapse sidebar
  • 仰若水
  • QtWiki
  • Wiki
  • qt多线程开发

Last edited by 仰若水 Mar 23, 2019
Page history

qt多线程开发

Qt为开发者提供了多种实现并发的方法,其中包含了QThread、QThreadPool以及QtConcurrent。下面我将从实际应用角度出发,来说明一下在什么情况下适合用什么样的方法。

  1. QThread 这种方法最为重量级,直接创建一个线程,然后可以将你需要并发操作的QObject放入该线程之中执行。因此这种方法最大的优点就是可以使用信号槽的队列特性,可以异步且顺序的执行操作。特别适合一些带有状态的操作。例如我可以先异步调用一个初始化方法,然后再调用一个获取方法,绝对不会出现未初始化就获取的线程安全问题。
  2. QThreadPool与QtConcurrent QtConcurrent本质上就是QThreadPool的封装,推荐直接使用QtConcurrent,这种方法将会从线程池中抽取一个线程来进行计算,因此避免了线程创建销毁的开销,效率较QThread高,但是调用无法保证顺序,适用于一些纯粹的计算,无状态、无相关性。例如获取到了图片列表使用QtConcurrent同时对所有的图片进行下载。

就BrainKit这款程序而言,其内部建立了一个线程专门管理各种状态,同时为每个App提供一个GUI线程,为每一台设备提供一个数据流线程。

Clone repository
  • Home
  • qt多线程开发