通过源码了解,QThread类中的线程是在哪里创建的

Qt中的QThread是常用的一个类,Qt的官方文档说这不仅仅是一个线程,实际上封装了很多东西;那么,其中的线程究竟在在哪里?通过Qt源码,我们可以有一个初步了解;

QThread的入口函数是run()函数,通过调用start()函数,可以启动run()函数,打开start()函数的定义,我们发现,在windows系统和unix系统下,分别调用了如下函数:

qthread_win.cpp :
    // MSVC -MT or -MTd build
    d->handle = (Qt::HANDLE) _beginthreadex(NULL, d->stackSize, QThreadPrivate::start,
                                            this, CREATE_SUSPENDED, &(d->id));
#else
    // MSVC -MD or -MDd or MinGW build
    d->handle = (Qt::HANDLE) CreateThread(NULL, d->stackSize, (LPTHREAD_START_ROUTINE)QThreadPrivate::start,
                                            this, CREATE_SUSPENDED, reinterpret_cast<LPDWORD>(&d->id));
qthread_unix.cpp :
int code = pthread_create(&threadId, &attr, QThreadPrivate::start, this);

分别,由上可知,QThread在调用start时才创建了线程,进一步推测,run()就是在这个创建的线程中运行;

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值