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

  • 32
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值