【QT】QThread 成员函数

2024-01-18 17:04
文章标签 函数 qt 成员 qthread

本文主要是介绍【QT】QThread 成员函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Public Functions

void QThread::exit(int returnCode = 0)

告诉线程的事件循环需要退出,并且返回code
调用此函数后,线程离开事件循环并从对 QEventLoop::exec() 的调用返回。 QEventLoop::exec() 函数返回 returnCode,returnCode 为 0 表示成功,任何非零值表示错误。
在再次调用 QThread::exec() 之前,该线程中不会再启动 QEventLoops。如果 QThread::exec() 中的事件循环没有运行,那么下一次调用 QThread::exec() 也将立即返回。
PS:该函数线程安全

bool QThread::isFinished() const

如果线程结束返回True,否则返回False
PS:线程安全

bool QThread::isInterruptionRequested() const

如果该线程上运行的任务应该停止,则返回true。可以通过requestinterrupt()请求中断。
此函数可用于使长时间运行的任务完全可中断。从不检查或操作此函数返回的值是安全的,但建议在长时间运行的函数中定期这样做。注意不要太频繁地调用它,以保持较低的开销
PS:Qt 5.2之后才有

void run() {while (!isInterruptionRequested()) {QMutexLocker lock(&m_mutex);// to do somethingmsleep(200);}
}// 暂停
void pause() 
{m_mutex.lock();
}
// 继续
void resume()
{m_mutex.unlock();
}
// 退出线程
void exitThread()
{thd->requestInterruption();thd->wait();thd->deleteLater();thd = nullptr;
}
bool QThread::isRunning() const

如果线程在运行返回True,否则返回False
PS:线程安全

与isFinished不同点可看QThread生命周期

void QThread::requestInterruption()

请求线程的中断。该请求是建议性的,由线程上运行的代码决定是否以及如何响应此类请求。此函数不会停止线程上运行的任何事件循环,也不会以任何方式终止它。
PS:线程安全
isInterruptionRequested一样,QT5.2才有

bool QThread::wait(QDeadlineTimer deadline = QDeadlineTimer(QDeadlineTimer::Forever))

阻止线程直到满足这些条件中的任何一个:

  • 与此 QThread 对象关联的线程已完成执行(即,当它从 run() 返回时)。如果线程完成,该函数将返回 true。如果线程尚未启动,它也会返回 true。
  • 截止日期已到。如果到达截止日期,该函数将返回 false。

设置为QDeadlineTimer::Forever(默认值)的截止时间计时器永远不会超时。类似std::thread::join
PS:QT5.15 被引入

Public Slots

void QThread::quit()

告诉线程的事件循环退出并返回代码 0(成功)。相当于调用QThread::exit(0)
如果线程没有事件循环,则该函数不执行任何操作。
PS:线程安全

void QThread::start(QThread::Priority priority = InheritPriority)

通过调用run()开始执行线程。操作系统会根据优先级参数来调度线程。如果线程已经在运行,则该函数不执行任何操作。

优先级参数的作用取决于操作系统的调度策略。特别是,在不支持线程优先级的系统上(例如在 Linux 上),优先级将被忽略。

多次调用start(),不会执行多次,只有完成后才会执行另一次
QThread对象,每次调用start函数,线程Id会变化,每次产生不同的线程Id

void QThread::terminate()

立即终止线程的执行。线程可能会也可能不会立即终止,具体取决于操作系统的调度策略。可以肯定的是,在终止()之后使用 QThread::wait()

警告:此功能很危险,不鼓励使用。
PS:永远不要使用该函数,该操作是非常危险的,因为你无法保证资源被安全释放(本人中过招doge)

Signals

void QThread::started()

在调用run()函数之前,该信号开始执行时从关联线程开始执行时发出。
PS:这是private signal

void QThread::finished()

该信号是在关联线程完成执行之前发出的。

当发出该信号时,事件循环已经停止运行。除了延迟删除事件之外,线程中不会再处理任何事件。该信号可以连接到 QObject::deleteLater(),以释放该线程中的对象。
PS:这是private signal

Static Public Members

QThread *QThread::currentThread()

顾名思义,返回当前线程指针

Qt::HANDLE QThread::currentThreadId()

返回当前正在执行的线程的线程句柄。

警告:此函数返回的句柄用于内部目的,不应在任何应用程序代码中使用。

注意:在 Windows 上,此函数返回由 Win32 函数 GetCurrentThreadId() 返回的 DWORD(Windows 线程 ID),而不是由 Win32 函数 GetCurrentThread() 返回的伪 HANDLE(Windows 线程 HANDLE)

void QThread::msleep(unsigned long msecs)

线程休眠

Protected Functions

virtual void run()

一般而言会重写run()函数,而run内的内容就是子线程执行的内容,除此之外,其他成员函数的执行均在原线程。
线程的起点。调用start()后,新创建的线程会调用该函数。
默认实现只是调用 exec()

这篇关于【QT】QThread 成员函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/619670

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议