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
This is an old version of this page. You can view the most recent version or browse the history.

qt多线程开发

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

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