通過源碼瞭解,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()就是在這個創建的線程中運行;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章