delphi多線(xiàn)程編程

delphi多線(xiàn)程編程

ID:14404288

大?。?3.50 KB

頁(yè)數(shù):21頁(yè)

時(shí)間:2018-07-28

delphi多線(xiàn)程編程_第1頁(yè)
delphi多線(xiàn)程編程_第2頁(yè)
delphi多線(xiàn)程編程_第3頁(yè)
delphi多線(xiàn)程編程_第4頁(yè)
delphi多線(xiàn)程編程_第5頁(yè)
資源描述:

《delphi多線(xiàn)程編程》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、我們知道,WIN95或WINNT都是"多線(xiàn)程"的操作系統(tǒng),在Delphi2.0中,我們可以充分利用這一特性,編寫(xiě)出"多線(xiàn)程"的應(yīng)用程序。對(duì)以往在DOS或16位windows下寫(xiě)程序的人來(lái)說(shuō),"多線(xiàn)程"仍然是陌生的,但如同以前我們從DOS下的單任務(wù)過(guò)渡到windows3.1下的多任務(wù),如今我們又必須過(guò)渡到"多線(xiàn)程"領(lǐng)域,畢竟計(jì)算機(jī)時(shí)代是在不斷發(fā)展的。不過(guò),幸運(yùn)的是,在Delphi2.0下進(jìn)行多線(xiàn)程程序設(shè)計(jì)并不需要我們?nèi)W(xué)習(xí)龐大的WIN32API函數(shù),我們可以利用Delphi下標(biāo)準(zhǔn)的多線(xiàn)程類(lèi)TThread來(lái)完成我們的工作。TThread是一個(gè)

2、abstract(抽象)類(lèi),也就是說(shuō),并不需要根據(jù)TThread來(lái)聲明變量(而且根據(jù)TThread聲明的變量也是完全無(wú)用),我們要做的是把TThread作為基類(lèi),用繼承的形式來(lái)生成子類(lèi)。實(shí)際上,根據(jù)TThread來(lái)寫(xiě)多線(xiàn)程應(yīng)用程序是非常容易的。下面就是一個(gè)基本的繼承TThread生成的多線(xiàn)程類(lèi)。QuerThrd.PasUnitQuerThrd;InterfaceUsesClasses,DBTables;TypeTQueryThread=class(TThread)privatefQuery:TQuery;protectedprocedur

3、eExecute;override;publicconstructorCreate(Suspended:Boolean;Query:TQuery);end;implementationconstructorTQueryThread.Create(Suspended:Boolean;Query:TQuery);begininheritedCreate(Suspended);fQuery:=Query;FreeOnTerminate:=True;end;procedureTQueryThread.Execute;beginfQuery.Ope

4、n;end;end.在上面這個(gè)簡(jiǎn)單的例子中,我們構(gòu)造了一個(gè)TThread的子類(lèi)TQueryThread,用于在后臺(tái)執(zhí)行數(shù)據(jù)庫(kù)查詢(xún)。在該類(lèi)的Create函數(shù)中,傳遞了兩個(gè)參數(shù)Suspended和Query,其中Suspended用于控制線(xiàn)程的運(yùn)行,如果Suspend為真,TQueryThread類(lèi)的線(xiàn)程在建立后將立即被懸掛,一直到運(yùn)行了Resume方法,該線(xiàn)程才會(huì)繼續(xù)執(zhí)行,Query參數(shù)用于接受一個(gè)已經(jīng)存在的Query控件(在窗體中真正的Query控件)而使它在多線(xiàn)程的情況下運(yùn)行。Execute是最重要的過(guò)程,它是類(lèi)TQueryThread

5、的執(zhí)行部分,所有需要在這個(gè)多線(xiàn)程類(lèi)中運(yùn)行的語(yǔ)句都必須寫(xiě)在這個(gè)過(guò)程里。實(shí)際上構(gòu)造自己的多線(xiàn)程類(lèi)時(shí),并不需要輸入所有的這些代碼,選擇Delphi的File菜單下的new選項(xiàng),再選"TThreadObject"項(xiàng)目,Delphi就會(huì)為你構(gòu)造基本的程序模塊。然后我們可以根據(jù)需要再做相應(yīng)的修改。進(jìn)程的執(zhí)行:假設(shè)我們已經(jīng)建立了一個(gè)窗體Form1,窗體中有我們將要使用的查詢(xún)控件Query1。那么我們?cè)谠搯卧腢SES部分加入上面寫(xiě)的QuerThrd單元。procedureTForm1.Button1Click(Sender:TObject);begin

6、{建立一個(gè)運(yùn)行的進(jìn)程}TQueryThread.Create(False,Query1);end;如果這個(gè)過(guò)程被執(zhí)行,那么窗體中的查詢(xún)控件Query1就會(huì)自動(dòng)在多線(xiàn)程的環(huán)境下運(yùn)行查詢(xún)。注意TQueryThread類(lèi)中只有Create而沒(méi)有Free,動(dòng)態(tài)建立類(lèi)以后又忘記刪除是我們常犯的錯(cuò)誤之一,不過(guò)在這里由于我們指定了FreeOnTerminate(運(yùn)行完即刪除)為真,所以當(dāng)Execute里的語(yǔ)句執(zhí)行完后,TQueryThread類(lèi)占據(jù)的內(nèi)存空間將被自動(dòng)釋放。然而還有一個(gè)問(wèn)題值得我們注意,由于同一時(shí)刻可以有多個(gè)線(xiàn)程同時(shí)運(yùn)行,那么我們還必須解

7、決好同步的問(wèn)題,如果幾個(gè)多線(xiàn)程程序之間沒(méi)有任何關(guān)聯(lián),那么它們之間也不會(huì)有任何沖突。但實(shí)際上,可能同時(shí)運(yùn)行幾個(gè)多線(xiàn)程的數(shù)據(jù)庫(kù)應(yīng)用程序,由于需要共享相同的數(shù)據(jù)庫(kù)資源,我們還需要為Query1增加一個(gè)Tsession控件。其實(shí),雖然我們也許沒(méi)有親自使用過(guò)Session控件,但實(shí)際上,在所有的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)時(shí)Delphi都會(huì)自動(dòng)建立一個(gè)臨時(shí)的Session控件,使用完后又動(dòng)態(tài)地刪除掉它。在平常的數(shù)據(jù)庫(kù)編程時(shí),用不著我們親自來(lái)操作,但在數(shù)據(jù)庫(kù)多線(xiàn)程執(zhí)行的情況下,為了不相互沖突,我們必須為每個(gè)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)都定制自己的Session控件。這個(gè)步驟非常簡(jiǎn)單,我

8、們只需要在窗體中增加一個(gè)Session控件,然后給它的屬性"Sessionname"寫(xiě)一個(gè)任意的名字,再在Query1的"Sessionname"中寫(xiě)一個(gè)相同的名字。這樣我們的數(shù)據(jù)庫(kù)程序就安全

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。