QThread是否为分离线程运行呢?
线程 运行 是否 分离 QThread
2023-06-13 09:17:29 时间
❝前一阵子有个小伙伴在群提问,今天特意找下源码看看。❞
- 分离线程:当线程被设置为分离状态后,线程结束时,它的资源会被系统自动回收。
- 非分离线程:当线程被设置为非分离状态后,必须在另一个线程中使用
pthread_join()
等待其结束,否则会变成"僵尸线程"。
- unix平台QThread实现是「分离线程」。
// 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);
...
}
- win平台下使用CreateThread创建线程,且没有分离和非分离线程的概念。
// 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));
...
}
相关文章
- C#问题——记一次线程运行突然停止
- SqlSessionTemplate是如何保证MyBatis中SqlSession的线程安全的?「建议收藏」
- 一线开发大牛带你深入探讨虚拟机运行时的java线程模型
- thread 守护线程_守护线程与非守护线程
- 创建线程池的方法_java引用就是对象本身
- 由浅入深理解Java线程池及线程池的如何使用详解编程语言
- python_Day42_线程-信号量事件条件详解编程语言
- 了解Java线程的start方法如何回调run方法详解编程语言
- 管理实现Arm Linux系统线程管理的有效方法(armlinux线程)
- 从Linux中探索线程与进程的融合——无界的界限(linux线程进程不分)
- Linux最大线程数限制:实现更多的可能性(linux总线程数)
- Linux下线程池实现最佳性能(linux线程池)
- 解析C/C++中如何终止线程的运行
- java多线程编程之使用runnable接口创建线程