【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

相关文章

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1