Qt中的多线程技术概览

一直对这方面不太清楚,最近学习了一下Qt的多线程,网络上有很多相关博客,在这里记录一下看到的优秀的博客和资料。

优秀的博客资料:

Qt 中的多线程技术:这篇博客从线程概念的起源讲到访问数据所面临的挑战,最后引入Qt 提供的多线程操作及其适用场景。

Qt 多线程编程之敲开 QThread 类的大门:详细讲述了QThread 及其操作,也指出了QThread 和moveToThread() 的正确使用方法。

Qt 多线程编程之降低线程的开销:详细讲述了线程池QThreadPool,及其本质。

Qt多线程编程之高级函数:讲述了Qt提供的高级API ,Qt Concurrent模块。

QWaitCondition 的正确使用方法

Qt官方资料

Qt中的线程支持:是相关内容的目录概览,包括几篇文章和涉及的类的链接。
主要是这几篇,比较全面:

虽然是英文的,但用谷歌进行网页翻译后,根据机翻结果对照着英文原文进行阅读,也没有什么障碍存在。
另外,学习多线程前最好先了解Qt的元对象系统和事件机制。

QThread:具有可选事件循环的低级API
  • QThread是Qt中所有线程控制的基础。每个QThread实例代表并控制一个线程。
  • QThread可以直接实例化也可以子类化。实例化QThread提供了一个并行事件循环,从而允许在辅助线程中调用QObject槽。子类化QThread允许应用程序在开始其事件循环之前初始化新线程,或者在没有事件循环的情况下运行并行代码。
QThreadPool和QRunnable:重用线程
  • 频繁创建和销毁线程可能会很昂贵。为了减少这种开销,可以将现有线程重用于新任务。QThreadPool是可重用的QThreads的集合。
  • 要在QThreadPool的线程之一中运行代码,请重新实现QRunnable :: run()并实例化子类QRunnable。使用QThreadPool :: start()将QRunnable放入QThreadPool的运行队列中。当线程可用时,QRunnable :: run()中的代码将在该线程中执行。
  • 每个Qt应用程序都有一个全局线程池,可以通过QThreadPool :: globalInstance()访问它。该全局线程池会根据CPU中的内核数自动维护最佳线程数。但是,可以显式创建和管理单独的QThreadPool。
Qt Concurrent:使用高级API
  • Qt Concurrent模块提供的高层次的函数。
  • 与使用QThread和QRunnable不同,这些函数从不需要使用低级线程原语,例如互斥量或信号量。相反,它们返回一个QFuture对象,当准备就绪时,该对象可用于检索函数的结果。QFuture还可以用于查询计算进度以及暂停/恢复/取消计算。为了方便起见,QFutureWatcher支持通过信号和槽与QFutures进行交互。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值