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

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

作者头像
Qt君
发布2023-03-17 14:57:12
5350
发布2023-03-17 14:57:12
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

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

  • 分离线程:当线程被设置为分离状态后,线程结束时,它的资源会被系统自动回收。
  • 非分离线程:当线程被设置为非分离状态后,必须在另一个线程中使用pthread_join()等待其结束,否则会变成"僵尸线程"。
  1. unix平台QThread实现是「分离线程」
代码语言:javascript
复制
// 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
复制
// 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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档