首页 > 其他分享 >QT为什么只能由主线程操作UI

QT为什么只能由主线程操作UI

时间:2023-06-25 19:35:05浏览次数:39  
标签:加锁 QT 主线 线程 IO UI

QT为什么只能由主线程操作UI

背景

QT中,每次子线程去更新Ui都要通过信号槽去刷。其实不光是QT,很多GUI程序框架都是这么规定的。

主线程:主线程是唯一允许创建QApplication或者QCoreApplication对象的,并且调用exec()启动事件循环的线程。

原因

直接原因:UI 线程负责和用户交互,因此不能长时间阻塞。因此耗时任务必须开启一个后台线程来完成。

根本原因

  • 多线程操作一个UI,很容易导致或者极其容易导致反向加锁和死锁问题。
  • 刷新UI,得走显卡吧,得刷显存吧,得排队吧,得阻塞吧,涉及到IO还得中断的事件,你敢并发?你以为加锁就ok了?锁能锁住线程,锁不住IO

参考:为什么大多数程序子线程都不能刷新UI? - 知乎 (zhihu.com)

标签:加锁,QT,主线,线程,IO,UI
From: https://www.cnblogs.com/3to4/p/17503768.html

相关文章

  • C# .NET6结束UI线程
    在.NET6项目中,不再支持Thread.Abort:Thread.AbortisnotsupportedandthrowsPlatformNotSupportedException.原因是Thread.Abort可能导致资源泄漏,1.不正常的关闭,导致线程运行过程中待释放资源的业务代码,未能完成执行。2.异常捕获,业务模块未添加捕获、业务模块添加了捕获但......
  • 【雕爷学编程】Arduino动手做(127)---2004A LCD液晶屏模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 安卓装包失败提示 Package xxx could not be assigned a valid UID解决方案
    1.因为新装包规则是总当前uid往后分配,所以我要找到uid最大的几个应用 cat/data/system/packages.list|awk'{print$2}'|sort-n 2.根据查到的uid分别找出对应包名去卸载cat/data/system/packages.list|grep查询到的uid  awk'{print$1,$2}' 3.......
  • 【雕爷学编程】Arduino动手做(126)---GP2Y0A02YK0F红外测距模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(125)---WT588D语音模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • Qt/c++类型转换总结
    1、static_cast、dynamic_cast、强制转换(reinterpret_cast和const_cast)、qobject_cast、qstatic_cast以及qdynamic_cast的区别:static_cast:用于执行静态类型转换,可以进行常见的类型转换,例如基本类型之间的转换、向上转型、向下转型(但没有运行时类型检查)等。在C++中......
  • GoLang图形用户界面编程实战(GUI编程)—fyne框架(三)
    fyne中文乱码的两种解决方法方法一(使用embed):embed是Go1.16新特性,以后会有专门的介绍。1、拷贝字体到项目目录项目根目录下新建resource目录,把字体文件拷贝到其中。2、在resource目录下新建resource_export.go文件。resource_export.go代码:packageresourceimport_"emb......
  • 【雕爷学编程】Arduino动手做(124)---24位WS2812环形灯板
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • nmtui 配置网卡双链路
    nmtui 配置网卡双链路 首先要找到要配置双链路的网卡的名称,记录下来。使用ethtool网卡名可以查看网卡是否接线ethtoolens16f0 nmtui命令打开图形配置界面nmtui Editaconnection Add 选Bond 按图添加bond网络配置,保存退出  重启Network......
  • http-equiv属性
    http-equiv的几个重要属性:refresh(重定向) <meta http-equiv="refresh" content="1;url=https://www.weimob.com">此处http-equiv属性定义为refresh,值为”1;url=https://www.weimob.com”,其值实现了2个功能,并使用分号进行分割。分号前面的数值1表示时间间隔为1秒,分号后面的......