【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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue-26、Vue内置指令v-cloak与v-once以及v-pre

1、v-cloak 本质上是一个特殊属性&#xff0c;Vue实例创建完毕并接管容器后&#xff0c;会删掉v-cloak属性使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF…

ocker ps -a 要求只显示自己想要的信息

在使用 docker ps -a 要求只显示这下面这几个字段&#xff0c;不显示其他的内容&#xff0c;方便查看哪些容器在运行&#xff0c;那些已经挂起。 例子&#xff1a; 我只想想显示这几个字段&#xff1a; CONTAINER ID STATUS NAMES docker ps -a --format "table {{.ID}…

Pure-admin框架 Pure-table中获取所选中的内容的信息

最近在尝试使用Pure-admin框架来进行开发&#xff0c;正好遇到了多选表格需要获取选中项的id的情况&#xff0c;因为平台介绍说是二次封装 element-plus 的 Table &#xff0c;直接拿el-table的方法来试 在table上设置属性ref"multipleTableRef" let idArr [];mult…

数据结构实验6:图的应用

目录 一、实验目的 1. 邻接矩阵 2. 邻接矩阵表示图的结构定义 3. 图的初始化 4. 边的添加 5. 边的删除 6. Dijkstra算法 三、实验内容 实验内容 代码 截图 分析 一、实验目的 1&#xff0e;掌握图的邻接矩阵的存储定义&#xff1b; 2&#xff0e;掌握图的最短路径…

华为网络设备文件传输FTP配置

R2配置 ftp server enable aaa local-user ftp-client password cipher Huawei123local-user ftp-client privilege level 15local-user ftp-client ftp-directory flash:/local-user ftp-client service-type ftpinterface GigabitEthernet0/0/0ip address 10.0.12.2 255.255.…

vue3 知识

vue3介绍 Vue3的变化: 1、vue3完全兼容vue2&#xff0c;但是vue3不建议用vue2的写法 2、拥抱TypeScript&#xff0c;ts完全兼容js 3、组合式API和配置项API vue2 是配置项api vue3 组合式api vue3项目创建和启动 # 创建vue3项目&a…

TDengine 企业级功能:存储引擎对多表低频场景优化工作分享

在去年 8 月份发布的 3.1.0.0 版本中&#xff0c;TDengine 进行了一系列重要的企业级功能更新&#xff0c;其中包括对多表低频场景写入性能的大幅优化。这一优化工作为有此需求的用户提供了更大的便捷性和易用性。在本文中&#xff0c;TDengine 的资深研发将对此次优化工作进行…

算法面试题:合并两个有序链表

描述&#xff1a;给定两个按非递减顺序排列的链表&#xff0c;合并两个链表&#xff0c;并将结果按非递减顺序排列。 例如&#xff1a; # 链表 1: 1 -> 2 -> 4 # 链表 2: 1 -> 3 -> 4合并后的链表应该是&#xff1a;1 -> 1 -> 2 -> 3 -> 4 -> 4 …

鸿蒙开发之状态管理

State 组件内状态 State装饰的变量&#xff0c;会和自定义组件的渲染绑定起来。当状态改变时&#xff0c;UI会发生对应的渲染改变。在状态变量相关装饰器中&#xff0c;State是最基础的&#xff0c;使变量拥有状态属性的装饰器&#xff0c;它也是大部分状态变量的数据源。 装…

QReadWriteLock的学习

参考&#xff1a; Qt线程的简单使用--QReadWriteLock的用法_qt的读写锁怎么应用-CSDN博客 应用场景&#xff1a;多个线程同时进行读操作。 比如&#xff1a;100个线程进行读操作&#xff0c;1个线程进行写操作。 示例1&#xff1a; #include <QObject> #include <…

wiadefui.dll文件丢失导致程序无法运行,怎么办?文件下载

很多用户在启动游戏或扫描仪的时候&#xff0c;电脑会报错提示“wiadefui.dll文件找到不到&#xff0c;程序无法启动”&#xff0c;这是怎么回事呢&#xff1f; 首先&#xff0c;我们先来了解wiadefui.dll文件是什么&#xff1f;有什么作用&#xff1f; wiadefui.dll是Windows…

L1-032 Left-pad(Java)

根据新浪微博上的消息&#xff0c;有一位开发者不满NPM&#xff08;Node Package Manager&#xff09;的做法&#xff0c;收回了自己的开源代码&#xff0c;其中包括一个叫left-pad的模块&#xff0c;就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块&a…

对docker的一些粗略理解

what-什么是docker&#xff1f;&#xff08;建议在Linux上安装&#xff0c;win11自带有linux系统&#xff0c;但是我试过在上面安装不太灵活&#xff09; 关键词&#xff1a;容器/盒子/大房子 Docker 是一种开源平台&#xff0c;用于轻松部署、运行和管理应用程序的容器化技术。…

渗透测试-靶机DC-2-知识点总结

靶机DC-2-知识点总结 一、前言二、实验环境三、渗透测试工具1. cewl&#xff08;1&#xff09;cewl简介&#xff08;2&#xff09;cewl常见用法 2. wpscan&#xff08;1&#xff09;wpscan简介&#xff08;2&#xff09;wpscan常见用法<1>直接扫描<2>-e u爆破用户名…

Elasticsearch各种高级文档操作2

本文来记录下Elasticsearch各种文档操作 文章目录 初始化文档数据 初始化文档数据 在进行各种文档操作之前&#xff0c;我们先进行初始化文档数据的工作

C++的命名空间域

一、域作用限定符 :: 即是域作用限定符&#xff0c;它的作用是指明一个标识符&#xff08;变量、函数或类&#xff09;来自哪一个作用域范围 二、编译器搜索变量、函数等的原则 1.先搜索局部变量&#xff0c;2.再搜索全局变量&#xff0c;3.最后搜索指定的命名空间域 三、…

回调函数和钩子函数的区别

文章目录 一、 回调函数和钩子函数的异同点1.1 回调函数和钩子函数的区别1.2 举例 二、回调函数和钩子函数的相同点 一、 回调函数和钩子函数的异同点 1.1 回调函数和钩子函数的区别 钩子函数和回调函数都是编程中常用的概念&#xff0c;它们在实现某些特定功能时都非常有用&…

java 读取word内容

接到一个任务&#xff0c;要读取doc文件的内容。解析里面的内容&#xff0c;进行一个处理和返回。 读取doc: 看了 很多文章&#xff0c;基本都是&#xff1a; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.extractor.WordExtractor; import java.i…

android 和 opencv 开发环境搭建

本文详细说明给android项目添加opencv库的详细步骤&#xff0c;并通过实现图片灰度化来查看配置是否成功。 下载OPENCV ANDROID SDK 到官网下载 打开 https://opencv.org/releases/ 选择android&#xff0c;下载完成后解压出下面的文件&#xff1a; 安装android sdk 和 ndk …

快手二面:节流和防抖知道吗?

面试官:节流与防抖&#xff0c;说说两者各自适用场景&#xff1f; 回答&#xff1a;面试官&#xff0c;在前端开发中&#xff0c;节流&#xff08;Throttle&#xff09;和防抖&#xff08;Debounce&#xff09;是两种常用的优化高频率执行JavaScript代码的技术。我将分别阐述它…