多線程編程※

多線程編程※

ID:40485372

大?。?23.50 KB

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

時(shí)間:2019-08-03

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

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

1、多線程編程主講:北京科海培訓(xùn)中心2-1多線程的基本概念WIN98/NT/2000/XP是個(gè)多任務(wù)操作系統(tǒng),也就是:一個(gè)進(jìn)程可以劃分為多個(gè)線程,每個(gè)線程輪流占用CPU運(yùn)行時(shí)間和資源,或者說(shuō),把CPU時(shí)間劃成片,每個(gè)片分給不同的線程,這樣,每個(gè)線程輪流的“掛起”和“喚醒”,由于時(shí)間片很小,給人的感覺(jué)是同時(shí)運(yùn)行的。多線程帶來(lái)如下好處:1)避免瓶頸;2)并行操作;3)提高效率;在多線程中,通過(guò)優(yōu)先級(jí)管理,可以使重要的程序優(yōu)先操作,提高了任務(wù)管理的靈活性。另一方面,在多CPU系統(tǒng)中,可以把不同的線程在不同的CPU中執(zhí)行,真正做到同時(shí)處理多任務(wù)(Win98只是模擬的,而Win/NT/2

2、000是真正的多CPU同時(shí)操作)。多線程的兩個(gè)概念——進(jìn)程1)進(jìn)程:也稱任務(wù),程序載入內(nèi)存,并分配資源,稱為“一個(gè)進(jìn)程”。注意:進(jìn)程本身并不一定要正在執(zhí)行。進(jìn)程由以下幾部分組成:一個(gè)私有的地址空間,它是進(jìn)程可以使用的一組虛擬內(nèi)存地址空間;程序的相關(guān)代碼、數(shù)據(jù)源;系統(tǒng)資源,比如操作系統(tǒng)同步對(duì)象等;至少包含一個(gè)線程(主線程);多線程的兩個(gè)概念——線程2)線程:是程序的執(zhí)行單位(線程本身并不包括程序代碼,真正擁有代碼的是進(jìn)程),每個(gè)進(jìn)程至少包括一個(gè)線程,稱為主線程,一個(gè)進(jìn)程如果有多個(gè)線程,就可以共享同一進(jìn)程的資源,并可以并發(fā)執(zhí)行。線程是進(jìn)程的一個(gè)執(zhí)行單元,是操作系統(tǒng)分配CPU時(shí)間

3、的基本實(shí)體,線程主要由如下兩部分組成:數(shù)據(jù)結(jié)構(gòu);CPU寄存器和堆棧;一個(gè)進(jìn)程中的線程,可以獨(dú)立運(yùn)行,也可以控制另一個(gè)線程的運(yùn)行。請(qǐng)注意:多線程不能濫用,書上提到了多線程的幾個(gè)缺點(diǎn)(自閱)。2-2Tthread對(duì)象雖然Windows提供了比較多的多線程設(shè)計(jì)的API函數(shù),但是直接使用API函數(shù)一方面極其不方便,而且使用不當(dāng)還容易出錯(cuò)。為解決這個(gè)問(wèn)題,Borland公司率先推出了一種Tthread對(duì)象,來(lái)解決多線程設(shè)計(jì)上的困難,簡(jiǎn)化了多線程問(wèn)題的處理。應(yīng)該注意,Tthread對(duì)象是沒(méi)有實(shí)例的,它和界面的交流,主要依靠主窗體,這和其他對(duì)象使用上有些區(qū)別。一、Tthread對(duì)象的主要

4、方法構(gòu)造線程:constructorCreate(CreateSuspended:boolean)其中:CreateSuspended=true構(gòu)造但不喚醒false構(gòu)造的同時(shí)即喚醒也可以用如下方法:inheritedCreate(CreateSuspended:boolean)Tthread對(duì)象的主要方法掛起線程:suspend(把線程掛起的次數(shù)加一)喚醒線程:resume(注意:注意這個(gè)屬性是把線程掛起的次數(shù)減一,當(dāng)次數(shù)為0時(shí),即喚醒。也就是說(shuō),線程掛起多少次,喚醒也需要多少次。同時(shí)掛起的時(shí)候?qū)⒈3志€程的地址指針不變,所以線程掛起后再喚醒,將從掛起的地方開始運(yùn)行)析構(gòu):

5、destroy(清除線程所占用的內(nèi)存)終止線程:Terminate二、線程應(yīng)用的簡(jiǎn)單例子:下面通過(guò)一個(gè)例子說(shuō)明上述方法的應(yīng)用。我們知道,循環(huán)是獨(dú)占性最強(qiáng)的運(yùn)行方式之一,現(xiàn)在希望建立兩個(gè)線程對(duì)象,實(shí)現(xiàn)循環(huán)的并行運(yùn)行。具體方法如下:File?New?ThreadObject這就自動(dòng)建立了一個(gè)線程單元框架(在對(duì)話框里寫上線程名字),默認(rèn)的名字是Unit2。同樣方法建立第二個(gè)線程單元Unit3。要注意的是:Unit2和Unit3中有一個(gè)給定的過(guò)程:procedureObject.Execute;begin………end;其中的程序是線程喚醒后自動(dòng)執(zhí)行的程序,也可以在里面調(diào)用其他自定義

6、的過(guò)程和函數(shù)。這個(gè)過(guò)程的結(jié)束,意味著線程程序的結(jié)束。為了構(gòu)造線程,在interface的Type區(qū),定義一個(gè)構(gòu)造過(guò)程:typeObject=class(TThread)//自動(dòng)給出的,也可以直接改privateprotectedprocedureExecute;override;publicconstructorcreate;//自己寫的并且在implementation區(qū)域?qū)懮希篶onstructorObject.create;begininheritedcreate(true);end其中Object為線程對(duì)象的名字。所以這么寫,是希望在主窗體中調(diào)用這個(gè)構(gòu)造過(guò)程。Cre

7、ate()的參數(shù)用True,表明構(gòu)造出的線程為掛起狀態(tài)。注意:在同一個(gè)線程對(duì)象里,如果兩次構(gòu)造,將產(chǎn)生兩個(gè)獨(dú)立的線程,不但運(yùn)行是獨(dú)立的,而且使用線程的局部變量也是獨(dú)立的。但這里為了簡(jiǎn)化問(wèn)題,還是建立了兩個(gè)獨(dú)立的線程對(duì)象,而且兩個(gè)循環(huán)數(shù)是不同的,在并行運(yùn)算時(shí)容易判斷出是兩個(gè)不同的程序在運(yùn)行。假定我們給兩個(gè)線程對(duì)象起的名字是:mymath1mymath2這樣在Unit1,應(yīng)該作如下聲明:implementation{$R*.DFM}usesunit2,unit3;varthread1:mymath1;thread2:m

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

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

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(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)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。