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

正文內(nèi)容

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

2024-11-22 13:29 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 統(tǒng)并發(fā)度高; 進(jìn)程將內(nèi)存作為自己獨(dú)享的資源,每個(gè)進(jìn)程都有自己的內(nèi)存空間;而線程共享內(nèi)存空間,并通過共享內(nèi)存交換信息,因此有利于提高系統(tǒng)效率。 第 10章 其他編程 TThread類 1. TThread類 TThread類是直接從 Tobject繼承下來的,它是抽象類,即不能創(chuàng) 建 TThread類的實(shí)例,而只能創(chuàng)建 TThread派生類的實(shí)例 — 即創(chuàng) 建線程對(duì)象。 ● 創(chuàng)建線程對(duì)象的方法是,選擇 Delphi 7主菜單下的 File?New?Other… ,在彈出的“ New Items”對(duì)話框的“ New” 選項(xiàng)卡中選擇 Thread Object圖標(biāo), 如圖所示。 第 10章 其他編程 TThread類 ● 當(dāng)雙擊 Thread Object圖標(biāo)后,將出現(xiàn)如圖所示的對(duì)話框,提示輸入 線程對(duì)象的名稱,線程對(duì)象名稱是一個(gè)標(biāo)識(shí)符,如 TestThread。 ● 輸入線程對(duì)象名后, Delphi 7會(huì)自動(dòng)創(chuàng)建一個(gè)包括該線程對(duì)象的單 元,該單元給出了線程的框架,其最初的內(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í)行的功能。 當(dāng) Create()需要參數(shù)為 False,則當(dāng)調(diào)用 Create()后,線程對(duì)象的Execute()方法將會(huì)自動(dòng)被調(diào)用,即自動(dòng)地執(zhí)行 Execute()的代碼。 當(dāng) Create()需要參數(shù)為 False ,則不自動(dòng)執(zhí)行 Execute()的代碼,而是要通過 TThread的 Resume()方法來喚醒線程。 第 10章 其他編程 TThread類 2. 與 VCL同步 大多數(shù) VCL都要求在任一時(shí)刻只允許一個(gè)線程訪問它,因此在Delphi中使用多線程,還有一個(gè)重要的注意事項(xiàng),即對(duì) VCL訪問只能在主線程中進(jìn)行,這表明所有與用戶交互的代碼只能在主線程中。同時(shí), Delphi為了使線程中的方法也能在主線程中執(zhí)行,在TThread中設(shè)置了一個(gè) Synchronize()方法,該方法聲明如下: procedure Synchronize(Method:TThreadMethod)。 Synchronize()方法的參數(shù)就是用來傳遞需要在主線程中執(zhí)行的線程中的方法。 第 10章 其他編程 線程的終止 當(dāng)線程對(duì)象的 Execute()方法執(zhí)行完畢后,就認(rèn)為該線程終止了,此時(shí) Delphi會(huì)自動(dòng)調(diào)用一個(gè)標(biāo)準(zhǔn)例程 EndThread(),該例程將再調(diào)用 API函數(shù) ExitThread(),由 ExitThread()來清除線程所占用的棧。 線程終止時(shí),將觸發(fā) OnTerminate事件,可以利用在退出 Execute()之前將 FreeOnTerminate屬性置為 True的方法來及時(shí)清除線程對(duì)象。 procedure 。 var i:integer。 Begin FreeOnTerminate := True。 //設(shè)置 FreeOnTerminate為 true以便及時(shí)清除線程對(duì)象 For i:=1 to 10000 do begin If Terminated then break。 Value:=Value+1。 end。 End。 第 10章 其他編程 線程的終止 【 例 】 創(chuàng)建如圖所示的窗體,單擊“開始”按鈕后,將創(chuàng)建一個(gè)附 屬線程,該線程執(zhí)行一個(gè)計(jì)算任務(wù),與此同時(shí)主線程并發(fā)執(zhí)行,用戶可在文本區(qū)域輸入任意的字符。示例中所使用的窗體和組件的屬性列于表中,未列的屬性均取默認(rèn)值。 主窗體(設(shè)計(jì)時(shí)) 第 10章 其他編程 線程的終止 窗體與組件的屬性設(shè)置 第 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,輸入線程對(duì)象名為 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í)行一個(gè)較長(zhǎng)的計(jì)算任務(wù) } 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運(yùn)行程序,結(jié)果如圖所示。 第 10章 其他編程 線程同步 編寫多線程應(yīng)用程序時(shí),需要控制好線程間的同步資源訪問,以保證線程的安全運(yùn)行。 所謂線程同步,簡(jiǎn)單說就是協(xié)調(diào)線程間的執(zhí)行時(shí)序。 Win32 API提供了一組同步對(duì)象,包括信號(hào)量、互斥、臨界區(qū)和事件等,來解決線程的同步問題。 Delphi分別將事件對(duì)象和臨界區(qū)對(duì)象封裝為 TEvent和TCriticalSection對(duì)象,使得事件和臨界區(qū)更易使用。 第 10章 其他編程 線程同步 1. 臨界區(qū) ◆ 臨界區(qū)是指一次只能由一個(gè)線程執(zhí)行的一段代碼 。 在使用 臨界區(qū)之前 , 要使用 InitializeCriticalSection()過程來初始化它 , 其聲明如下: procedure InitializeCriticalSection (var lpCriticalSection:TRTLCriticalSection)。stdcall。 ● lpCriticalSection是一個(gè) TRTLCriticalSection類型的記錄 , 在該參數(shù)中傳遞未初始化的記錄 , ● InitializeCriticalSection()過程就會(huì)填充這個(gè)記錄 。 ● TRTLCriticalSection是一個(gè)與臨界區(qū)資源相關(guān)的類型 , 。 第 10章 其他編程 線程同步 ◆ 創(chuàng)建臨界區(qū),使用 EnterCriticalSection()和 LeaveCriticalSection()過程來封裝代碼塊。這兩個(gè)過程的聲明如下: procedure EnterCriticalSection(var lpCriticalSection: TRTLCriticalSection)。stdcall。 procedure LeaveCriticalSection(var lpCriticalSection: TRTLCriticalSection)。stdcall。 ◆ 當(dāng)不再需要 TRTLCriticalSection記錄時(shí),要調(diào)用DeleteCriticalSection()過程將其刪除。 第 10章 其他編程 線程同步 【 例 】 設(shè)有一個(gè)全局?jǐn)?shù)組,分別用兩個(gè)線程對(duì)其進(jìn)行兩次初始化,需要對(duì)這兩個(gè)線程同步,否則將出現(xiàn)數(shù)據(jù)不確定的情形。用臨界區(qū)方式進(jìn)行兩線程的同步,將對(duì)數(shù)組各元素賦值的代碼設(shè)為臨界區(qū)。程序界面如圖所示,當(dāng)單擊“初始化”按鈕后,將生成兩個(gè)線程并執(zhí)行,在列表框中顯示數(shù)組元素值。 ( 1)創(chuàng)建應(yīng)用程序界面,新建如圖所示的窗體,并放置一個(gè) label、一個(gè) button和一個(gè) listbox組件,各組件及其屬性設(shè)置列于表中。 第 10章 其他編程 線程同步 窗體與組件的屬性設(shè)置 第 10章 其他編程 線程同步 ( 2)在 Form1對(duì)應(yīng)的 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線程對(duì)象并執(zhí)行 (False)。 end。 end. 第 10章 其他編程 線程同步 ( 3)創(chuàng)建線程對(duì)象 TinitThread,選擇主菜單的 File?New?Other… ,在 New Items的 New選項(xiàng)卡中雙擊 “ Thread Object”圖標(biāo),在彈出的對(duì)話框中輸入線程名 “ TinitThread”。 ( 4)在系統(tǒng)自動(dòng)新建的 Unit2單元中輸入程序代碼: unit Unit2。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1