Qt基础之十二:Qt多线程基础

本文介绍了Qt中多线程的基础知识,包括GUI线程与工作线程的区别,如何保证数据完整性,线程的应用场景以及使用线程的注意事项。强调了线程安全,如QMutex、QReadWriteLock和QWaitCondition等同步机制,以及异步执行和事件循环在多线程中的作用。
摘要由CSDN通过智能技术生成

目录

一.GUI线程和工作线程

二.同时访问数据

三.使用线程

1.线程大致有两种应用场景

2.何时使用其他技术替代线程?

3.应该使用Qt线程的哪种技术?

四.线程基础

1.QObject与线程

2.保证数据的完整性

3.处理异步执行

4.线程与事件循环


一.GUI线程和工作线程

每个程序在启动时都有一个线程,这个线程被称为“主线程”(在Qt应用程序中也称为“GUI线程”)。Qt GUI必须在主线程中运行。所有widgets和一些相关的类,例如QPixmap,都不能在辅助线程中工作。辅助线程通常被称为“工作线程”,因为它用于减轻主线程的工作负担。

二.同时访问数据

每个线程都有自己的堆栈,这意味着每个线程都拥有自己的调用历史和本地变量。与进程不同,线程共享相同的地址空间。下图显示了线程的构建块在内存中的位置。非活动线程的程序计数器和寄存器通常保存在内核空间中。每个线程都有一个共享的代码副本和一个单独的堆栈。


如果两个线程具有指向同一对象的指针,则两个线程可能同时访问该对象,这可能会破坏对象的完整性。很容易想象,当同时执行同一对象的两个方法时,会出现很多问题。
有时需要从不同的线程访问一个对象;例如,当在不同线程中的对象需要通信时。由于线程使用相同的地址空间,因此线程交换数据比进程更容易、更快。数据不必序列化和复制。传递指针是可行的,但必须严格协调哪个线程访问哪个对象。必须防止对一个对象同时执行操作。实现这一点有几种方法,其中一些方法如下所述。
那么,如何保证

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值