全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4013
推到 Plurk!
推到 Facebook!

TThread

 
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-01 21:59:46 IP:220.143.xxx.xxx 未訂閱
TThread http://www.csdn.com.cn/program/285.htm 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線程被調用。該線程物件也可在該事件中被釋放
系統時間:2024-11-25 9:04:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!