程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> TThread

TThread

編輯:關於C++

TThread是一個抽象類,可以創建幾個獨立的線程。

類關系 TObject

在一個多線程的應用程序中創建一個TThread的後子類代表一個線程。每一新子類的TThread對象的實例是一個新的線程。從TThread派生的多線程實例可以構成Delphi的多線程應用程序。

當一個應用程序運行時,應用程序就被載入內存准備執行。此時,它成為包含一個或多個線程的進程,每個線程含有數據、代碼和系統資源。線程執行應用程序的部分內容,並由系統分配CPU時間。同一進程的所有線程共享同一地址空間,可以訪問進程的全局變量。線程通過以下工作改善應用的性能:管理多通信設備的輸入。

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

以下是使用線程的一些建議:

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

當多個線程更新相同的資源時,應使線程同步以避免沖突。

大多數訪問VCL對象和更新窗體的方法必須從主VCL線程內部調用。

以下為創建和使用一個新線程的過程:

(1)單擊File|New|Thread菜單項,創建一個包含對象的新單元,該對象源於TThread類。

(2)定義新線程對象和Create方法。

(3)通過插入線程執行時需要的代碼定義線程對象和Execute方法。

(4)將使用VCL組件的任何調用傳遞給Synchronize方法,以避免多線程沖突。

屬性列表

FreeOnTerminate 線程終止時該對象是否自動刪除

Handle 包含線程句柄

Priority 確定該線程相對於進程中其他線程的優先級

ReturnValue 返回線程值

Suspended 指示一線程是否被掛起

Terminated 表明線程被要求終止

ThreadID 標識貫穿系統的線程

方法列表

~TThread 刪除線程對象並釋放其戰用的內存空間

DoTerminate 產生一個OnTerminate事件

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

Resume 重新執行一個掛起的線程

Suspend 掛起一個運行中的線程

Synchronize 在主VCL線程中執行Method

Terminate 將Ternimated屬性設置為True通知線程終止

TThread 創建一個線程對象的實例

WaitFor 等待線程終止並返回ReturnValue屬性值

事件列表

OnTerminateExecute 方法已返回且該線程被刪除前發生

屬性

TThread::FreeOnTerminate

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

確定當線程終止時,該線程對象是否自動刪除。

FreeOnTerminate默認值為False,線程對象必須在代碼中顯示刪除。

包含線程句柄。

當調用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};

當線程的Execute方法已經返回且在該線程被刪除之前發生。

OnTerminate事件句柄在主VCL線程被調用。該線程對象也可在該事件中被釋放。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved