Qt中的多线程

这篇具有很好参考价值的文章主要介绍了Qt中的多线程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Qt中的多线程


目录

1 为什么需要多线程
2 Qt中使用多线程的一些注意事项
3 QThread类
  3.1 QThread类的主要接口
  3.2 线程的优先级
4 通过继承QThread类实现多线程
5 从QObject类进行派生实现多线程
5 小结


1 为什么需要多线程

    在现代化的程序设计开发中,多进程、多线程是经常采用的设计方式。在Qt程序中,默认线程(主线程)为窗口线程,当Qt程序在某些情况下需要处理复杂逻辑的时候(比如需要较长时间的网络操作、耗时的数据处理等)可能会占用很长的时间,这时候可能会导致窗口线程响应缓慢(UI响应卡顿),这时候通过多线程设计让多个逻辑事件分配在多个线程中进行操作,并处理好多个线程间的同步与交互,就能极大的提升程序的用户体验和程序执行效率。

2 使用多线程的一些注意事项

    1、Qt中窗口所在的线程为默认主线程,窗口的事件处理和控件的数据更新在此线程进行。

    2、子线程和主线程之间的数据传递主要通过信号槽机制进行。
    3、子线程用于负责非UI部分的后台逻辑,不可操作窗口中的对象。


3 QThread类

    QThread类是Qt提供的一个不依赖于平台的多线程类。

    在使用时,通常会定义一个继承QThread类的自定义类,重定义虚函数run()的实现;用一个从该自定义类实例化的对象来管理一个线程;在主线程中通过对象的start()接口来启动线程(start()接口底层会调用run()实现);在run()实现中调用exit()或者quit()能够结束线程的事件循环,在主线程中调用terminate()可以强制结束线程。
    但也可以通过从QObject类进行派生的方式来实现多线程,这种方式使用起来会更加灵活,但是在代码实现上会更复杂一些。

3.1 QThread类的主要接口

    QThread类是继承自QObject类的,其中主要的一些接口如下:

        1、[公共函数] 判断线程是否结束:bool isFinished()
        2、[公共函数] 判断线程是否正在运行:bool isRunning()
        3、[公共函数] 获得线程的优先级:Priority priority()
        4、[公共函数] 设置线程的优先级:void setPriority(Priority priority)
        5、[公共函数] 退出事件循环:void exit(int returnCode = 0)
        6、[公共函数] 阻塞线程执行直到线程结束,或者time 毫秒:void wait(unsigned long time)
        7、[公共槽函数] 退出线程事件循环:void quit()
        8、[公共槽函数] 根据priority,开始调度、执行线程:void start(Priority priority)
        9、[公共槽函数] 终止线程:void terminate()
        10、[信号] 在线程快结束完成时发射:void finished()
        11、[信号] 在线程调用run()实现前发射:void started()
        12、[静态公共函数] 获得系统可运行的线程的数量:int idealThreadCount()
        13、[静态公共函数] 强制当前线程休眠msecs:int msleep(unsigned long msecs)
        14、[静态公共函数] 强制当前线程休眠secs:int sleep(unsigned lon文章来源地址https://www.toymoban.com/news/detail-798865.html

到了这里,关于Qt中的多线程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式Qt 第一个Qt项目

    打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项   弹出New Project对话框,选择Qt Widgets Application 选择【Choose】按钮,弹出如下对话框 设置项目名称和路径,按照向导进行下一步   选择编译套件 向导会默认添加一个继承自QMainWindow的类,可

    2024年02月20日
    浏览(49)
  • 【嵌入式——QT】容器类

    Qt提供了基于模板的容器类,这些容器类可以用于存储指定类型的数据项,Qt的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。它们还是线程安全的,它们作为只读容器时可被多个线程访问。 容器类是基于模板的类,如常用的容器类QList,T是一个具体的类型,可

    2024年02月22日
    浏览(50)
  • 嵌入式 QT 界面布局管理

    目录 1、实例程序功能 2、界面组件布局 2.1 界面组件的层次关系 2.2 布局管理 2.3 伙伴关系和Tab顺序       创建一个 Widget Application 项目 samp2_2, 在创建窗体时选择基类 QDialog ,生成的类命名为 QWDialog ,并选择生成窗体。     如 此 新建 的项 目 samp2_2 有一 个界 面文 件 qwdi

    2024年02月04日
    浏览(56)
  • 【嵌入式——QT】QStyledItemDelegate用法详解

    QStyledItemDelegate是所有Qt item视图的默认委托,在创建它们时就会被安装在它们上面。 QStyledItemDelegate类是模型/视图类之一,是Qt模型/视图框架的一部分。委托允许项目的显示和编辑独立于模型和视图进行开发。 模型中数据项的数据被赋值为ItemDataRole;每个物品可以为每个角色存

    2024年01月23日
    浏览(50)
  • 嵌入式:QT Day4

    源码: widget.h widget.cpp main.cpp

    2024年02月14日
    浏览(41)
  • 嵌入式:QT Day2

    源码: widget.h second.h widget.cpp second.cpp main.cpp    

    2024年02月15日
    浏览(45)
  • 嵌入式:QT Day1

    源码: widge.h  widge.cpp  main.cpp

    2024年02月15日
    浏览(48)
  • 嵌入式开发板qt gdb调试

    1) 启动 gdbserver ssh 或者 telnet 登陆扬创平板 192.168.0.253, 进入命令行执行如下: chmod 777 /home/HelloWorld (2) 打 开 QTcreator-Debug-StartDebugging-Attach to Running Debug Server 进行如下设置,设置监听端口10000. 点击上图中的按钮,由于按钮中的函数设置了断点,则跳到断点,界面如下

    2024年02月04日
    浏览(95)
  • 嵌入式 QT纯代码设计UI

        目录 1.1 实例功能 1.2 界面创建 1.3 界面组件的创建与布局 1.4 信号与槽的关联 UI 的可视化设计是对用户而言的,其实底层都是 C++ 的代码实现,只是 Qt 巧妙地进行了处理,让用户 省去了很多繁琐的界面设计工作。   由于界面设计的底层其实都是由 C++ 语言实现的,底层

    2024年03月09日
    浏览(56)
  • 【嵌入式Qt开发入门】初识Qt——Linux下安装Qt

            Qt 是一个跨平台的 C++开发库。主要用来开发图形用户界面(Graphical User Interface,简 称 GUI)程序。         Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部; Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多

    2024年02月16日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包