QThread類參考

pamxy發表於2013-03-27

轉自:http://www.kuqin.com/qtdocument/qthread.html

QThread類提供了與系統無關的執行緒。 詳情請見……

#include <qthread.h>

繼承了Qt

所有成員函式的列表。

公有成員

靜態公有成員

保護成員

  • virtual void run () = 0

靜態保護成員

  • void sleep ( unsigned long secs )
  • void msleep ( unsigned long msecs )
  • void usleep ( unsigned long usecs )

詳細描述

QThread類提供了與系統無關的執行緒。

QThread代表在程式中一個單獨的執行緒控制,在多工作業系統中,它和同一程式中的其它執行緒共享資料,但執行起來就像一個單獨的程式一樣。它不是在main()中開始,QThread是在run()中開始執行的。你繼承run()並且在其中包含你的程式碼。例如:

    class MyThread : public QThread {

    public:

        virtual void run();

    };

    void MyThread::run()
    {
        for( int count = 0; count < 20; count++ ) {
            sleep( 1 );
            qDebug( "Ping!" );
        }
    }

    int main()
    {
        MyThread a;
        MyThread b;
        a.start();
        b.start();
        a.wait();
        b.wait();
    }
    

這將會開始兩個執行緒,每個執行緒在螢幕上寫20次“Ping!”並且退出。在main()的結尾呼叫wait()是必需的,因為main()的結束會終結整個程式,它會殺掉所有其它執行緒。當每個MyThread執行到MyThread::run()結尾時,它就結束執行,就好像一個應用程式離開main()時所做的一樣。

也可以參考Qt中支援的執行緒環境類執行緒類


成員函式文件

QThread::QThread ()

構造一個新的執行緒。這個執行緒將直到start()被呼叫的時候才開始執行。

QThread::~QThread () [虛]

QThread解構函式。

注意刪除QThread物件將不會停止它所代表的執行緒的執行。刪除一個執行中的執行緒(比如finished()返回假)將可能導致程式崩潰這樣的結果。你可以對執行緒執行wait()來確定程式執行結束。

Qt::HANDLE QThread::currentThread () [靜態]

這返回當前執行的執行緒的執行緒控制程式碼。

警告:這個函式返回的控制程式碼用於內部目的並且應該在任何應用程式程式碼中使用它。在Windows中,返回值是當前執行緒的假控制程式碼,並且它不能用於數字比較。

void QThread::exit () [靜態]

結束呼叫執行緒的執行並且喚醒任何等待它終止的執行緒。

bool QThread::finished () const

如果執行緒完成,返回真,否則返回假。

void QThread::msleep ( unsigned long msecs ) [靜態 保護]

與系統無關的睡眠。這將導致當前執行緒睡眠msecs毫秒。

void QThread::postEvent ( QObject * receiver, QEvent * event ) [靜態]

提供一個從一個不是事件執行緒的執行緒傳送一個事件到一個物件的方法。

如下是已經完成的:

  • event被放進佇列;
  • 事件執行緒被喚醒;
  • 事件執行緒傳送事件到receiver物件。
重要的是請注意事件的事件處理器當它被呼叫時,它是被事件執行緒呼叫,而不是被呼叫QThread::postEvent()的執行緒所呼叫。

因為QThread::postEvent()傳送事件到QApplication的事件佇列,你必須在呼叫QThread::postEvent()之前建立QApplication物件。

事件必須在堆上分配,因為傳送事件的佇列會得到事件的所有權並且一旦這個事件被髮送成功,它將被刪除。

也可以參考QApplication::postEvent()。

void QThread::run () [純虛 保護]

這個方法是純虛的,並且為了能夠做有用的工作必須在繼承類中被重新實現。這個方法的返回將會結束執行緒的執行。

也可以參考wait()。

bool QThread::running () const

如果執行緒正在執行,返回真,否則返回假。

void QThread::sleep ( unsigned long secs ) [靜態 保護]

與系統無關的睡眠。這將導致當前執行緒睡眠secs秒。

void QThread::start ()

通過呼叫run()(必須在QThread子類中重新實現來包含你的程式碼)開始這個執行緒的執行。如果你試圖開始一個已經執行的執行緒,這個呼叫將一直等待,直到這個執行緒完成,然後再重新開始這個執行緒。

void QThread::usleep ( unsigned long usecs ) [靜態 保護]

與系統無關的睡眠。這將導致當前執行緒睡眠usecs微秒。

bool QThread::wait ( unsigned long time = ULONG_MAX )

這將提供和POSIX pthread_join相似的功能。一個執行緒呼叫了它將會一直阻塞,知道下述條件之一滿足時繼續:
  • 這個QThread物件所關聯的執行緒已經結束執行(比如,當它從run()中返回)。如果執行緒完成,這個函式將返回真。如果執行緒還沒有開始呢,這個函式也返回真。
  • time毫秒過去了。如果time是ULONG_MAX(預設值),然後等待將永遠不會超時(執行緒必須從run()中返回)。如果等待時間到了,這個函式將返回假。

這個檔案是Qt工具包一部分。 版權所有 © 1995-2002 Trolltech。保留所有權利。

Copyright © 2002 Trolltech Trademarks 譯者:Cavendish
Qt 3.0.5版

相關文章