day01 线程类

多线程

在进行桌面应用程序开发的时候,假设应用程序在某些情况下需要处理比较复杂的逻辑,如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作,这种情况就要使用多线程。其中一个线程处理窗口事件,另一个线程进行逻辑运算,多个线程各司其职,不仅可以提高用户体验还可以提高执行效率。

在qt中使用了多线程,有些事项是需要注意的:

  • 默认的线程在qt中称之为窗口线程也叫主线程,负责窗口事件的处理或者窗口控件数据的更新
  • 子线程负责后台业务逻辑处理,子线程中不能对窗口对象做任何操作,这些事情需要交给窗口线程处理
  • 主线程和子线程如果需要进行数据的传递,需要用到qt中的信号槽机制。

线程类 QThread

Qt 提供了一个线程类,通过这个类就可以创建子线程了,Qt中一共提供了两种创建子线程的方式。

常用公共成员函数

构造函数
QThread::QThread(QObject *parent = Q_NULLPTR);
  • QObject:父对象
判断是否处理完毕
bool QThread::isFinished() const
  • 执行完毕返回 true
  • 未执行完毕返回 false
判断是否在执行
bool QThread::isRunning() const
  • 正在执行 true
  • 执行完毕 false
设置优先级
void QThread::setPriority(Priority priority)
  • 默认最高,可调整。抢到 cpu 时间片概率
线程退出1
void QThread::exit(int returnCode = 0)
  • 退出线程,停止底层循环,退出线程工作函数
线程退出2
bool QThread::wait(unsigned long time = ULONG_MAX)
  • 线程不会马上退出,因为有可能当前任务未完成
  • 等待任务完成,退出线程,一般情况下在 exit 后使用

信号槽

结束
[signal] void QThread::finished()
  • 线程中任务执行完成发出该信号
  • 任务函数中的处理逻辑执行完毕
开始
[signal] void QThread::started()
  • 开始工作之前发出这个信号,一般不使用
终止
[slot] void QThread::terminate()

  • 停止线程的进行,一般在QThread::wait() 之后,不建议使用
退出
[slot] void QThread::quit()

  • 退出线程,效果和 QThread::wait()相同。
  • 调用此函数之后,再调用QThread::wait()
启动子线程
[slot] void QThread::start(Priority priority = InheritPriority)

静态函数

获得当前QThread指针
[static] QThread *QThread::currentThread()

  • 返回一个管理当前执行线程的QTherad的指针。
返回线程数
[static] int QThread::idealThreadCount()

  • 返回可以再系统上运行的理想的线程数,和当前电脑的 CPU 核心数相同
休眠
[static] void QThread::msleep(unsigned long msecs)

  • 毫秒
[static] void QThread::sleep(unsigned long secs)

[static] void QThread::usleep(unsigned long usecs)

  • 微妙

任务处理函数

处理任务
[virtual protected] void QThread::run()

  • 是一个虚函数,如果想要创建的子类执行某个任务,需要写一个子类让其继承QThread并在子类中重写 run()函数
  • 是一个受保护的成员函数,不能再类外部调用,如果想让线程执行业务流程,需要通过当前函数对象调用槽函数start()启动子线程,当子线程被启动,这个run()函数也就被调用了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值