前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >QThread是否为分离线程运行呢?

QThread是否为分离线程运行呢?

作者头像
Qt君
发布于 2023-03-17 06:57:12
发布于 2023-03-17 06:57:12
63000
代码可运行
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程
运行总次数:0
代码可运行

❝前一阵子有个小伙伴在群提问,今天特意找下源码看看。❞

  • 分离线程:当线程被设置为分离状态后,线程结束时,它的资源会被系统自动回收。
  • 非分离线程:当线程被设置为非分离状态后,必须在另一个线程中使用pthread_join()等待其结束,否则会变成"僵尸线程"。
  1. unix平台QThread实现是「分离线程」
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// qt-everywhere-src-5.12.1\qtbase\src\corelib\thread\qthread_unix.cpp
void QThread::start(Priority priority)
{
    ...
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    ...
}
  1. win平台下使用CreateThread创建线程,且没有分离和非分离线程的概念。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// qt-everywhere-src-5.12.1\qtbase\src\corelib\thread\qthread_win.cpp
void QThread::start(Priority priority)
{
    ...
    // MSVC -MD or -MDd or MinGW build
    d->handle = CreateThread(nullptr, d->stackSize,
                             reinterpret_cast<LPTHREAD_START_ROUTINE>(QThreadPrivate::start),
                             this, CREATE_SUSPENDED, reinterpret_cast<LPDWORD>(&d->id));
    ...
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
QThread源码浅析[通俗易懂]
Qt版本 Qt5.6.0,下面以Windows平台为例简单研究下QThread源码实现。
全栈程序员站长
2022/09/02
5960
【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )
1. 线程创建方法函数原型 : int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, (void*)(*start_rtn)(void*), void *arg);
韩曙亮
2023/03/27
2.7K0
【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )
pthread_attr_init线程属性
线程具有属性,用pthread_attr_t表示,在对该结构进行处理之前必须进行初始化,在使用后需要对其去除初始化。我们用pthread_attr_init函数对其初始化,用pthread_attr_destroy对其去除初始化。
心跳包
2020/08/31
1.9K0
线程源码分析之attr.c(基于linuxthreads2.0.1)
attr.c是线程属性管理的实现。因为linuxthreads是通过创建一个进程的方式实现线程的,所以属性中支持设置调度的优先级,调度策略等(参考操作系统的实现)。该文件没有太多内容。具体作用在分析其他文件的时候再作分析。
theanarkh
2019/10/08
6900
Can't build Qt5 (qtbase) on Windows XP (win32-msvc2005)
In a cmd.exe prompt, using msysgit, I cloned git://gitorious.org/qt/qtbase.git. Set QTDIR to that qtbase directory, added %QTDIR%\bin to PATH. Made sure sh.exe is not in the PATH. Set The problem:
用户3519280
2023/07/06
1750
Can't build Qt5 (qtbase) on Windows XP (win32-msvc2005)
使用vc(vs2008)编译Qt5.4
官方的Qt 只有vc10以上的版本 若是想vc9 只能自己编译 so 开始干 搜索资料 1)vc9不能支持webkit的编译 直接删除掉 2)有部分地方 vc9默认支持LONG转ULONG 需要自己改代码 3)需要OPENSSL 4)需要python3.4.3 5)需要activePerl开工 1。下载安装activeperl 2。下载安装python3.4.3 3。编译openssl 0.9.8k perl Configure VC-WIN32 –prefix=C:\Build-OpenSSL-VC9-32 ms\do_ms nmake -f ms\nt.mak   nmake -f ms\nt.mak install 4。开始config Qt5 一个bat搞定
用户3519280
2023/07/06
3150
【Linux探索学习】第二十九弹——线程概念:Linux线程的基本概念与线程控制详解
https://blog.csdn.net/2301_80220607/category_12805278.html?spm=1001.2014.3001.5482
GG Bond1
2025/02/19
1770
【Linux探索学习】第二十九弹——线程概念:Linux线程的基本概念与线程控制详解
并发问题解密:探索多线程和锁机制
描述: pthread_create()函数在调用进程中启动一个新线程。新线程通过调用start_routine()开始执行;arg作为start_routine()的唯一参数传递。
Lion 莱恩呀
2024/09/26
3180
并发问题解密:探索多线程和锁机制
pthread_create 线程属性-多线程操作 pthread_create pthread_join
  例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。
宜轩
2022/12/26
1.1K1
Linux线程互斥学习笔记--详细分析
    在Linux下, 线程的互斥量数据类型是pthread_mutex_t 在使用前, 要对它进行初始化:
用户6754675
2019/12/09
8430
Linux笔记(18)| 线程基础(二)
上一节里讲了线程的基本概念,和进程的关系等等。这一节来深入一些,讲一讲具体的一些知识。
飞哥
2020/11/25
6250
Linux笔记(18)| 线程基础(二)
Linux多线程编程(一)
属性对象主要包括是否绑定、是否分离、堆栈地址、堆栈大小、优先级。默认的属性为非绑定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。pthread_attr_t结构的定义,定义在pthread.h中
efonfighting
2019/09/24
2K0
Linux多线程编程(一)
Posix线程 它们那一大家子事儿,要觉得好你就收藏进被窝里慢慢看 (1)
官方话就是:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
看、未来
2020/08/25
4040
Posix线程 它们那一大家子事儿,要觉得好你就收藏进被窝里慢慢看  (1)
【Linux线程】线程控制原语详细介绍
线程就是 Light weight process ,LWP,轻量级进程,在Linux环境下它仍然是进程,一个进程内部可以有多个线程,默认情况下一个进程内部有一个线程。不同的是,进程有自己的进程控制块PCB,并且拥有自己独立的地址空间;而线程虽然也有线程控制块(这样来看,如果一个进程内有多个线程,那么进程内将有多个PCB),但是它没有独立的地址空间,而是共享空间,我们可以理解为在进程的虚拟空间中除了栈都是共享的(在实际编程中,线程一般就是一个函数,函数肯定要有自己的栈来运行)。也就是说,进程和线程最大的区别在于是否共享地址空间。在Linux环境下,线程是最小的执行单位,进程是最小的资源分配单位。
mindtechnist
2024/08/08
1830
【Linux线程】线程控制原语详细介绍
多线程编程C语言版
什么是多线程,提出这个问题的时候,我还是很老实的拿出操作系统的书,按着上面的话敲下“为了减少进程切换和创建开销,提高执行效率和节省资源,我们引入了线程的概念,与进程相比较,线程是CPU调度的一个基本单位。”
DeROy
2021/11/16
3.8K0
多线程编程C语言版
Linux多线程编程小结
前一段时间由于开题的事情一直耽搁了我搞Linux的进度,搞的我之前学的东西都遗忘了,非常烦躁的说,如今抽个时间把之前所学的做个小节。文章内容主要总结于《Linux程序设计第3版》。
全栈程序员站长
2022/07/12
1.7K0
12(线程控制)
线程属性主要有: (1)线程的分离状态属性detachstate, (2)线程栈末尾的警戒缓冲区大小guardsize, (3)线程栈的最低地址statckaddr, (4)线程栈的大小stacksize。 如果对现有某个线程的终止状态不感兴趣的话,可以使用pthread_detach函数让操作系统在线程退出时候收回它所占用的资源。
提莫队长
2019/02/21
5700
Linux下多线程编程详解简介
上面的代码很简单,就是启动一个线程,然后先线程里循环打印字段字符串。我们就以这个最简单的例子来开口。
用户2929716
2018/08/23
4.4K0
线程属性设置
本文将通过一个创建n个线程的案例来展示一下线程属性的设定及使用,通常情况下,系统对于线程的创建是没有限制的,但是每一个线程都是需要一个栈空间的,每个栈空间大小也都是固定的,可通过系统命令 ulimit -a 来查看,如果线程栈空间的总数超过了一个进程可使用的虚拟内存用户空间,那么就无法再继续创建线程了。我们只是做一个小的测试,调整每个线程的栈空间大小来揭露线程属性的使用方法,并提高一个程序创建线程的数量(Notice:提高线程数量并没有什么好处,我们只是为了演示如何修改线程属性)。
我与梦想有个约会
2023/10/20
3950
线程属性设置
温故Linux后端编程(三):线程
在多处理器共享内存的架构中(如:对称多处理系统SMP),线程可以用于实现程序的并行性。历史上硬件销售商实现了各种私有版本的多线程库,使得软件开发者不得不关心它的移植性。对于UNIX系统,IEEE POSIX 1003.1标准定义了一个C语言多线程编程接口。依附于该标准的实现被称为POSIX theads 或 Pthreads。
看、未来
2021/09/18
6840
推荐阅读
相关推荐
QThread源码浅析[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验