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()就是在这个创建的线程中运行;