回覆列表
  • 1 # 使用者5933125843701

    delphi 的 TThread是一個抽象類,可以建立幾個獨立的執行緒。

    類關係 TObject

    在一個多執行緒的應用程式中建立一個TThread的後子類代表一個執行緒。每一新子類的TThread物件的例項是一個新的執行緒。從TThread派生的多執行緒例項可以構成Delphi的多執行緒應用程式。

    當一個應用程式執行時,應用程式就被載入記憶體準備執行。此時,它成為包含一個或多個執行緒的程序,每個執行緒含有資料、程式碼和系統資源。執行緒執行應用程式的部分內容,並由系統分配CPU時間。同一程序的所有執行緒共享同一地址空間,可以訪問程序的全域性變數。執行緒透過以下工作改善應用的效能:管理多通訊裝置的輸入。

    區分任務的優先順序。優先順序高的處理緊急的任務。優先順序低的處理其他任務。

    以下是使用執行緒的一些建議:

    同時跟蹤太多的執行緒消耗CPU時間。對單處理器系統,一個程序最多有16個執行緒。

    當多個執行緒更新相同的資源時,應使執行緒同步以避免衝突。

    大多數訪問VCL物件和更新窗體的方法必須從主VCL執行緒內部呼叫。

    以下為建立和使用一個新執行緒的過程:

    (1)單擊File|New|Thread選單項,建立一個包含物件的新單元,該物件源於TThread類。

    (2)定義新執行緒物件和Create方法。

    (3)透過插入執行緒執行時需要的程式碼定義執行緒物件和Execute方法。

    (4)將使用VCL元件的任何呼叫傳遞給Synchronize方法,以避免多執行緒衝突。

    屬性列表

    Handle 包含執行緒控制代碼

    Priority 確定該執行緒相對於程序中其他執行緒的優先順序

    ReturnValue 返回執行緒值

    Suspended 指示一執行緒是否被掛起

    Terminated 表明執行緒被要求終止

    ThreadID 標識貫穿系統的執行緒

    方法列表

    DoTerminate 產生一個OnTerminate事件

    Execute 提供包含執行緒執行時所需程式碼的抽象方法

    Resume 重新執行一個掛起的執行緒

    Suspend 掛起一個執行中的執行緒

    Synchronize 在主VCL執行緒中執行Method

    Terminate 將Ternimated屬性設定為True通知執行緒終止

    TThread 建立一個執行緒物件的例項

    WaitFor 等待執行緒終止並返回ReturnValue屬性值

    事件列表

    屬性

    TThread::FreeOnTerminate

    __property bool FreeOnTerminate = {read=FFreeOnTerminate,write=FFreeOnTerminate,nodefault};

    包含執行緒控制代碼。

    當呼叫Win32API函式處理執行緒時,使用Handle.

    TThread::Priority

    __property TThreadPriority Priority = {read=GetPriority,write=SetPriority,nodefault};

    確定該執行緒相對於程序中其他執行緒的優先順序。

    Priority屬性為一列舉型別,其預設為tpNormal.

    TThreadPriority型別定義了TThread元件的Priority屬性的可能值,如下表所述。Windows根據優先順序確定每一個執行緒的CPU週期。

    _____________________________________________________________________

    值 含義

    _____________________________________________________________________

    tpIdle 只有當系統空閒時該執行緒執行

    tpLowest 執行緒優先順序比正常低2點

    tpLower 執行緒優先順序比正常低1點

    tpNormal 執行緒優先順序為正常值

    tpHigher 執行緒優先順序比正常高1點

    tpHighest 執行緒優先順序比正常高2點

    tpTimeCritical 執行緒優先順序最高

    TThread::ReturnValue

    __property int ReturnValue = {read=FReturnValue,write=FReturnValue,nodefault};

    返回執行緒值。

    使用ReturnValue應用為其他執行緒指示其成功/失敗或數字結果/輸出。WaitFor方法返回儲存在ReturnValue中的值。

    TThread::Suspended

    __property bool Suspended = {read=FSuspended,write=SetSuspended,nodefault};

    指示一執行緒是否被掛起。

    除非重新執行,否則被掛起的執行緒不會繼續執行。若將Suspended設定為True將掛起一個執行緒;若設定為False,則繼續執行該執行緒。

    TThread::Terminated

    __property bool Terminated = {read=FTerminated,nodefault};

    表明執行緒被要求終止。Terminate方法將Terminated屬性設定為True。

    執行緒的Execute方法和任何Execute呼叫的方法將週期性地檢查Terminated,當其為True時,將終止執行。

    TThread::ThreadID

    __property int ThreadID = {read=FhreadID,nodefault};

    標識貫穿系統的執行緒。

    當呼叫Win32API函式處理執行緒時,ThreadID將十分有用。

    注意:ThreadID與Handle屬性不同。

    方法

    TThread::~TThread

    __fastcall virvual ~TThread(void);

    在應用中不要呼叫~TThread。用delete替代。

    ~TThread通知執行緒終止,並在呼叫Destroy方法前等待該執行緒返回。

    TThread::DoTerminate

    virtual void __fastcall DoTerminate(void);

    產生一個OnTerminate事件。

    DoTerminate呼叫OnTerminate時間控制代碼,但並不終止該執行緒。

    TThread::Execute

    virtual void __fastcall Execute(void) =0;

    提供包含執行緒執行時所需程式碼的抽象方法。

    Execute檢視Terminated屬性值以決定該執行緒是否需要終止。

    當CreateSuspended被設定為False,當呼叫Create時,一執行緒執行;線上程建立後先呼叫了Resume且CreateSuspended為True,一執行緒執行。

    注意:不要線上程的Execute方法中直接呼叫

    其他物件的屬性和方法。應該將對其他物件的使用分成幾個不同的過程,將其作為一個傳遞到Synchronize方法的引數分別呼叫。

    TThread::Resume

    void __fastcall Resume(void);

    重新執行一個掛起的執行緒。

    呼叫Suspend可以巢狀。因此呼叫Resume必須注意次序。

    TThread::Suspend

    void __fastcall Suspend(void);

    掛起一個執行中的執行緒。

    呼叫Resume可以繼續執行。呼叫Suspend可以巢狀。因此呼叫Resume必須次序。

    TThread::Synchronize

    typedef void __fastcall(__closure* TThreadMethod)(void);

    void __fastcall Synchronize (TThreadMethod&Method);

    在主VCL執行緒中執行Method。

    Synchronize方法由Method指定的呼叫被主VCL執行緒執行。

    注意:當在主VCL執行緒中執行Method時,當前的執行緒被掛起。

    TThread::Terminate

    void __fastcall Terminate(void);

    透過將Terminated屬性設定為True通知執行緒終止。

    執行緒的Execute方法以及Execute呼叫的任何方法應週期性的檢查Terminated,當其為True時終止執行。

    TThread::TThread

    __fastcall TThread(bool CreateSuspended);

    建立一個執行緒物件的例項。

    在應用中不要直接使用TThread來建立執行緒。用new替代,傳遞CreateSuspended引數argument。若CreateSuspended為False,Execute被立即呼叫。若CreateSuspended為True,Execute直到Resume被呼叫後才被呼叫。

    TThread::WaitFor

    int __fastcall WaitFor(void);

    等待執行緒終止並返回ReturnValue屬性值。

    直到執行緒終止時WaitFor才返回,因此執行緒一定是因為結束了Execute方法或因Terminated屬性為了True而終止。如果該執行緒使用Synchronize,則不要在主VCL執行緒中呼叫WaitFor,否則或者引起系統宕機,或者產生一個EThread異常。

    Synchronize在允許該方法生效前等待主VCL執行緒進入資訊迴路。若主VCL執行緒已經呼叫了WaitFor,它將不會進入資訊迴路,Synchronize也永遠不會返回。此時,TThread將產生一個EThread意外並使該執行緒終止;而且如果該意外沒有被Execute方法截獲,該應用也將終止。如果呼叫WaitFor時,Synchronize已經在VCL執行緒中等待,TThread將不會干預,應用程式將宕機。

    事件

    TThread::OnTerminate

    __property TNotifyEvent OnTerminate = {read=FOnTerminate,write=FOnTerminate};

    OnTerminate事件控制代碼在主VCL執行緒被呼叫。該執行緒物件也可在該事件中被釋放。

  • 中秋節和大豐收的關聯?
  • 虎皮青椒怎麼做好吃?