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()就是在這個創建的線程中運行;