文章目录

  • 1 Qt中多线程间的同步

1 Qt中多线程间的同步

多线程编程的本质是什么?

  • 并发性是多线程编程的本质。
  • 在宏观上,所有线程并行执行。
  • 多个线程间相互独立,互补干涉。


常规解决方案设计:

问题:线程间总是完全独立毫无依赖的吗?

  • 并不是,在特殊情况下,多线程的执行在时序上存在依赖!

生活中的例子:

同步的概念:

  • 在特殊情况下,控制多线程的相对执行顺序。
  • QThread类直接支持线程间的同步,wait()停止当前线程的执行,等待目标线程执行结束。

编程实验:并行计算初探

#include <QtCore/QCoreApplication>
#include <QThread>
#include <QDebug>/*sum(n) => 1 + 2 + 3 + ... + nsum(1000) => ?[1, 1000] =  [1, 300] [301, 600] [601, 1000]*/class Calculator : public QThread
{protected:int m_begin;int m_end;int m_result;void run(){qDebug() << objectName() << ": run() begin";for(int i=m_begin; i<=m_end; i++){m_result += i;msleep(10);}qDebug() << objectName() << ": run() end";}
public:Calculator(int begin, int end){m_begin = begin;m_end = end;m_result = 0;}void work(){run();}int result(){return m_result;}
};int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);qDebug() << "main begin";Calculator cal1(1, 300);Calculator cal2(301, 600);Calculator cal3(601, 1000);cal1.setObjectName("cal1");cal2.setObjectName("cal2");cal3.setObjectName("cal3");// cal1.work();// cal2.work();// cal3.work();cal1.start();cal2.start();cal3.start();cal1.wait();cal2.wait();cal3.wait();int result = cal1.result() + cal2.result() + cal3.result();qDebug() << "result = " << result;qDebug() << "main end";return a.exec();
}

参考资料:

  1. QT实验分析教程

Qt中多线程间的同步相关推荐

  1. Qt中多线程间的互斥

    文章目录 1 多线程间的互斥 1.1 生产消费者问题 1.2 QMutex 1.3 死锁问题 1.4 信号量 1 多线程间的互斥 值得思考的问题: 多个线程间除了在时序上可能产生依赖,在其它方面是否也 ...

  2. QT 中多线程实现方法总结

    第一: 用QtConcurrentRun类,适合在另一个线程中运行一个函数.不用继承类,很方便 第二:用QRunnable和QThreadPool结合.继承QRunnable,重写run函数,然后用Q ...

  3. c#,c++,qt中多线程访问UI控件线程的问题汇总

    c#和MFC中可以创建UI控件及模态/非模态对话框,Qt中只能在主UI线程中创建访问UI控件. c#和MFC中可以通过全局变量或指针句柄等方式在工作线程中访问其他UI线程控件,其中c#需要Invoke ...

  4. Qt中多线程与界面组件的通信

    文章目录 1 多线程与界面组件的通信 1.1 通过信号与槽实现多线程与界面组件的通信 1.2 通过自定义事件实现多线程与界面组件的通信 1 多线程与界面组件的通信 有趣的问题: 是否可以在子线程中创建 ...

  5. Qt中多线程moveToThread

    Qt中实现多线程的方式.1.利用继承QThread类,重写run函数实习.2.将对象使用moveToThread方法,利用信号槽实现.3.利用QtConcurrent相关QFuture实现. 以前一直 ...

  6. Qt中多线程的一种使用

    系统需要在子窗体中进行一个耗时的数据融合过程,之前意识到UI所在的主线程会被卡死的情况,但因为赶进度需要扩展新功能就暂时没顾上,只用了一种相对妥协的方法,QProgressDialog用于进度的显示, ...

  7. QT中connect、disconnect和信号槽实现原理

    connect connect用于连接信号和槽函数,但是我们经常忽略最后一个参数,本人在写代码时遇到了bug,选择一个符号进行多次标绘,再选择其他符号时,会将上一次选择的符号也进行标绘,主要时conn ...

  8. VC++中多线程学习(MFC多线程)三(线程同步包含:原子互锁、关键代码段、互斥器Mutex、Semaphores(信号量)、Event Objects(事件))

    目录 ​​​​​​​​​​​​ 线程同步的必要性: 2.解决同步问题的方法 2.1原子互锁家族函数 2.2Critical Sections(关键代码段.关键区域.临界区域) 2.3 互斥器Mutex ...

  9. Qt中使用多线程并返回结果到主线程的例子

    Qt中使用多线程是通过connect关联信号和槽来实现子线程与主线程之间的数据传递与页面数据展示的,详细请看下面实例: 下面三行代码是实现主线程与子线程通信的信号连接. //子线程运行了RUN()中的 ...

最新文章

  1. 从0到1,网上搜不到的企业信息安全搭建全过程,这本书讲透了!
  2. 三位整数两位小数掩码_小数点造句_造句大全
  3. Mbp,一个用于学习.net core的开发框架
  4. PDF Expert使用教程:如何在Mac上使用PDF Expert编辑PDF
  5. scm中mysql作用_scm项目问题
  6. Linux对变量的截取替换
  7. SQL Server 复制:事务发布
  8. Atitit sumdoc everything index tech and index log 目录 1. 使用的tech 1 1.1. Atitit 日志记录的三个trace跟踪等级文件夹级
  9. 斯坦福、康奈尔都推荐的量子计算课程教材:《量子计算》
  10. iOS弱引用表 SideTable weak_table_t weak_entry_t
  11. 智源首席科学家孙茂松当选欧洲科学院外籍院士
  12. 扛住时间,不负自我,37岁自学计算机语言-Python的后果
  13. IOS免签支持在线封装app分发源码 免签封装带绿标
  14. 让IPv6强大的关键——NDP邻居发现协议
  15. 科技交流英语(2022秋)Unit1-Unit8题干速查
  16. 数字1、2、3、4能组成多少个互不相同且无重复数字的三位数,并将其输出。
  17. 3.ConcurrentMap-并发Map
  18. 从DPU看未来网络架构的演进趋势
  19. 基于Python的复杂环境中车道线自动检测系统
  20. 开发这么久这些问题都不会?java模拟器安卓版最新版下载

热门文章

  1. 【Python】爬虫学习
  2. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第1章-绪论
  3. 一起学nRF51xx 13 - twi iic
  4. LTE 有关HARQ
  5. 【DIY】玩转VFD荧光屏,自制VFD时钟全资料(原理图+源码+PCB)
  6. 使用STM32CubeMX求得CPU芯片温度
  7. 一、ESP32环境搭建(基于vscode插件platformIO)
  8. 单片机联网,UIP实现tcp/udp协议
  9. # 华硕笔记本电脑如何配置win10系统U盘 # 以及安装或重装win10系统#
  10. 一个基于Node.js的本地快速测试服务器