freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第10章其他編程(編輯修改稿)

2024-11-22 13:29 本頁面
 

【文章內(nèi)容簡介】 統(tǒng)并發(fā)度高; 進程將內(nèi)存作為自己獨享的資源,每個進程都有自己的內(nèi)存空間;而線程共享內(nèi)存空間,并通過共享內(nèi)存交換信息,因此有利于提高系統(tǒng)效率。 第 10章 其他編程 TThread類 1. TThread類 TThread類是直接從 Tobject繼承下來的,它是抽象類,即不能創(chuàng) 建 TThread類的實例,而只能創(chuàng)建 TThread派生類的實例 — 即創(chuàng) 建線程對象。 ● 創(chuàng)建線程對象的方法是,選擇 Delphi 7主菜單下的 File?New?Other… ,在彈出的“ New Items”對話框的“ New” 選項卡中選擇 Thread Object圖標, 如圖所示。 第 10章 其他編程 TThread類 ● 當雙擊 Thread Object圖標后,將出現(xiàn)如圖所示的對話框,提示輸入 線程對象的名稱,線程對象名稱是一個標識符,如 TestThread。 ● 輸入線程對象名后, Delphi 7會自動創(chuàng)建一個包括該線程對象的單 元,該單元給出了線程的框架,其最初的內(nèi)容如下所示: 第 10章 其他編程 TThread類 unit Unit1。 interface uses Classes。 type TestThread = class(TThread) private { Private declarations } protected procedure Execute。 override。 end。 implementation { } { TestThread } procedure 。 begin { Place thread code here } end。 end. 第 10章 其他編程 TThread類 TThread派生類中唯一必須覆蓋的方法是 Excute(),即需要定義線程所執(zhí)行的功能。 當 Create()需要參數(shù)為 False,則當調(diào)用 Create()后,線程對象的Execute()方法將會自動被調(diào)用,即自動地執(zhí)行 Execute()的代碼。 當 Create()需要參數(shù)為 False ,則不自動執(zhí)行 Execute()的代碼,而是要通過 TThread的 Resume()方法來喚醒線程。 第 10章 其他編程 TThread類 2. 與 VCL同步 大多數(shù) VCL都要求在任一時刻只允許一個線程訪問它,因此在Delphi中使用多線程,還有一個重要的注意事項,即對 VCL訪問只能在主線程中進行,這表明所有與用戶交互的代碼只能在主線程中。同時, Delphi為了使線程中的方法也能在主線程中執(zhí)行,在TThread中設置了一個 Synchronize()方法,該方法聲明如下: procedure Synchronize(Method:TThreadMethod)。 Synchronize()方法的參數(shù)就是用來傳遞需要在主線程中執(zhí)行的線程中的方法。 第 10章 其他編程 線程的終止 當線程對象的 Execute()方法執(zhí)行完畢后,就認為該線程終止了,此時 Delphi會自動調(diào)用一個標準例程 EndThread(),該例程將再調(diào)用 API函數(shù) ExitThread(),由 ExitThread()來清除線程所占用的棧。 線程終止時,將觸發(fā) OnTerminate事件,可以利用在退出 Execute()之前將 FreeOnTerminate屬性置為 True的方法來及時清除線程對象。 procedure 。 var i:integer。 Begin FreeOnTerminate := True。 //設置 FreeOnTerminate為 true以便及時清除線程對象 For i:=1 to 10000 do begin If Terminated then break。 Value:=Value+1。 end。 End。 第 10章 其他編程 線程的終止 【 例 】 創(chuàng)建如圖所示的窗體,單擊“開始”按鈕后,將創(chuàng)建一個附 屬線程,該線程執(zhí)行一個計算任務,與此同時主線程并發(fā)執(zhí)行,用戶可在文本區(qū)域輸入任意的字符。示例中所使用的窗體和組件的屬性列于表中,未列的屬性均取默認值。 主窗體(設計時) 第 10章 其他編程 線程的終止 窗體與組件的屬性設置 第 10章 其他編程 線程的終止 ● 保存主窗體單元為 ,源程序如下: unit Main。 interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ThrdU。 type TMainForm = class(TForm) Label1: TLabel。 Button1: TButton。 Label2: TLabel。 Edit1: TEdit。 Memo1: TMemo。 procedure Button1Click(Sender: TObject)。 end。 第 10章 其他編程 線程的終止 var MainForm: TMainForm。 implementation {$R *.dfm} procedure (Sender: TObject)。 begin (False)。 { 創(chuàng)建線程 , 使其立即執(zhí)行 } end。 end. 第 10章 其他編程 線程的終止 ● 創(chuàng)建線程單元 ,選擇主菜單的 File?New?Unit,輸入線程對象名為 TtestThread,再輸入以下源程序: unit ThrdU。 interface uses Classes。 type TTestThread = class(TThread) {線程 TTestThread類定義 } private Answer:integer。 protected procedure GiveAnswer。 procedure Execute。 override。 end。 implementation uses SysUtils,Main。 procedure 。 begin :=InttoStr(Answer)。 end。 第 10章 其他編程 線程的終止 { TTestThread } procedure 。 {執(zhí)行一個較長的計算任務 } Var i:integer。 begin FreeOnTerminate:=True。 for i:=1 to 2020000 do begin if Terminated then break。 Inc(Answer,Round(abs(sin(sqrt(i)))))。 Synchronize(GiveAnswer)。 {使 GiveAnswer能在主線程中執(zhí)行 } end。 end。 end. 第 10章 其他編程 線程的終止 ● 單擊 F9運行程序,結果如圖所示。 第 10章 其他編程 線程同步 編寫多線程應用程序時,需要控制好線程間的同步資源訪問,以保證線程的安全運行。 所謂線程同步,簡單說就是協(xié)調(diào)線程間的執(zhí)行時序。 Win32 API提供了一組同步對象,包括信號量、互斥、臨界區(qū)和事件等,來解決線程的同步問題。 Delphi分別將事件對象和臨界區(qū)對象封裝為 TEvent和TCriticalSection對象,使得事件和臨界區(qū)更易使用。 第 10章 其他編程 線程同步 1. 臨界區(qū) ◆ 臨界區(qū)是指一次只能由一個線程執(zhí)行的一段代碼 。 在使用 臨界區(qū)之前 , 要使用 InitializeCriticalSection()過程來初始化它 , 其聲明如下: procedure InitializeCriticalSection (var lpCriticalSection:TRTLCriticalSection)。stdcall。 ● lpCriticalSection是一個 TRTLCriticalSection類型的記錄 , 在該參數(shù)中傳遞未初始化的記錄 , ● InitializeCriticalSection()過程就會填充這個記錄 。 ● TRTLCriticalSection是一個與臨界區(qū)資源相關的類型 , 。 第 10章 其他編程 線程同步 ◆ 創(chuàng)建臨界區(qū),使用 EnterCriticalSection()和 LeaveCriticalSection()過程來封裝代碼塊。這兩個過程的聲明如下: procedure EnterCriticalSection(var lpCriticalSection: TRTLCriticalSection)。stdcall。 procedure LeaveCriticalSection(var lpCriticalSection: TRTLCriticalSection)。stdcall。 ◆ 當不再需要 TRTLCriticalSection記錄時,要調(diào)用DeleteCriticalSection()過程將其刪除。 第 10章 其他編程 線程同步 【 例 】 設有一個全局數(shù)組,分別用兩個線程對其進行兩次初始化,需要對這兩個線程同步,否則將出現(xiàn)數(shù)據(jù)不確定的情形。用臨界區(qū)方式進行兩線程的同步,將對數(shù)組各元素賦值的代碼設為臨界區(qū)。程序界面如圖所示,當單擊“初始化”按鈕后,將生成兩個線程并執(zhí)行,在列表框中顯示數(shù)組元素值。 ( 1)創(chuàng)建應用程序界面,新建如圖所示的窗體,并放置一個 label、一個 button和一個 listbox組件,各組件及其屬性設置列于表中。 第 10章 其他編程 線程同步 窗體與組件的屬性設置 第 10章 其他編程 線程同步 ( 2)在 Form1對應的 Unit1單元文件中輸入程序代碼: unit Unit1。 interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,unit2。 Type TForm1 = class(TForm) Button1: TButton。 ListBox1: TListBox。 Label1: TLabel。 procedure Button1Click(Sender: TObject)。 end。 第 10章 其他編程 線程同步 var Form1: TForm1。 CS:TRTLCriticalSection。 // 聲明臨界區(qū)資源記錄變量 implementation {$R *.dfm} procedure (Sender: TObject)。 begin InitializeCriticalSection(CS)。 // 初始化臨界區(qū) (False)。 // 創(chuàng)建 TinitThread線程對象并執(zhí)行 (False)。 end。 end. 第 10章 其他編程 線程同步 ( 3)創(chuàng)建線程對象 TinitThread,選擇主菜單的 File?New?Other… ,在 New Items的 New選項卡中雙擊 “ Thread Object”圖標,在彈出的對話框中輸入線程名 “ TinitThread”。 ( 4)在系統(tǒng)自動新建的 Unit2單元中輸入程序代碼: unit Unit2。
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1