999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

DELPHI中多線程研究

2013-04-29 00:00:00李若重
中國新通信 2013年4期

一、進(jìn)程與線程

一個操作系統(tǒng)有多個進(jìn)程在同時進(jìn)行,而一個進(jìn)程又會有多個線程在同時進(jìn)行,每個線程都有自己的執(zhí)行狀態(tài)和獨立的上下文結(jié)構(gòu)(保存在線程控制塊中)及執(zhí)行棧(用戶棧、系統(tǒng)棧),同一進(jìn)程中的線程通過各種同步機(jī)制(如臨界區(qū)、事件、互斥量、信號燈等)來實現(xiàn)對共享資源的訪問。

二、Delphi中的多線程機(jī)制

Delphi編譯環(huán)境的核心是可以直接調(diào)用幾乎所有的Windows API函數(shù)。通常是通過過程調(diào)用一系列外部模塊來實現(xiàn),其最大的優(yōu)點是利用面向?qū)ο蟮募夹g(shù)支持。通過對Delphi中類實現(xiàn)的源代碼分析,可以從中了解到類的構(gòu)造過程及功能的實現(xiàn),以便更有效的利用其提供的線程類完成多線程程序設(shè)計。

Delphi中多線程技術(shù)的實現(xiàn)是通過TThread類來封裝Windows API的有關(guān)線程操作的編程接口。TThread類繼承自TOb-ject,除繼承父類的成員外還定義了一些屬性和方法,主要分為線程對象屬性、線程對象方法、線程對象事件處理三類:

(1)線程對象屬性(Properties):

FatalException異常處理對象

FreeOnTerminate布爾量,決定線程結(jié)束時是否清除

Handle線程句柄

Priority線程優(yōu)先級

ReturnValue線程返回值

Suspended布爾量,判斷線程是否已掛起

Terminated布爾量,判斷線程是否需要結(jié)束

ThreadID線程全局唯一的標(biāo)記

(2)線程對象方法(Methods):

AfterConstruction對象創(chuàng)建后運行,重載自父類

Create創(chuàng)建線程對象構(gòu)造器

Destroy釋放線程對象析構(gòu)器

DoTerminate釋放線程前調(diào)用用戶的清除例程

Execute線程執(zhí)行,虛類函數(shù),子類需重載

Resume使線程重新執(zhí)行

Suspend掛起運行線程

Synchronize線程間操作同步

Terminate置線程終止標(biāo)記

WaitFor等待線程結(jié)束

(其它繼承自父類TObject對象)

(3)線程對象事件處理(Events):

onTerminate線程結(jié)束前調(diào)用的方法指針

2.1線程的創(chuàng)建、運行和終止

線程類調(diào)用繼承自父類的構(gòu)造器(con-structor Create)創(chuàng)建對象實例,接著調(diào)用線程管理例程的Addthread全局例程將全局線程記數(shù)值加1,隨后即通過線程管理例程中的BeginThread全局例程調(diào)用Windows API函數(shù)Createthread,以參數(shù)形式向其傳入線程運行主函數(shù)Threadproc。在此之前還將全局變量IsMultiThread置為真,以用于各線程安全地訪問內(nèi)存管理器實現(xiàn)多線程保護(hù)。值得注意的是,線程類在創(chuàng)建內(nèi)核線程對象時總是將其置為掛起狀態(tài)(為保證線程對象初始化安全),而在其AfterConstruction(重載其父類的方法)中,即在線程類的對象創(chuàng)建后,在判斷CreateOnsuspend的保護(hù)變量后,調(diào)用Resume方法使線程開始運行。其次,線程運行主函數(shù)Threadproc代表了線程執(zhí)行的全過程。當(dāng)其開始運行時,直接調(diào)用TThread的Execute虛方法(線程的主要執(zhí)行部分),線程執(zhí)行完畢后,置線程結(jié)束標(biāo)記。執(zhí)行DoTerminate方法運行CallOnterminate調(diào)用用戶事件處理掛鉤Onterminte處理用戶線程結(jié)束前的清理工作。若選擇FreeOnTermi-nate屬性為真,則線程運行完成后,將通過Free方法調(diào)用析構(gòu)器Destory釋放線程對象,關(guān)閉線程句柄,將全局線程記數(shù)減1,最后通過線程管理例程的EndThread調(diào)用API函數(shù)ExitThread通知操作系統(tǒng)線程結(jié)束。

2.2線程的狀態(tài)切換操作

Delphi中使用私有方法GetPriority和SetPriority獲取和設(shè)置線程優(yōu)先級(封裝Windows API的GetThreadPriority和Set-ThreadPriority)。但動態(tài)改變線程的優(yōu)先級對線程的執(zhí)行有潛在的危險,不慎重地提高優(yōu)先級可能會造成處理器資源分配的不合理,使某些線程始終得不到處理器時間。最好是在線程構(gòu)造器中創(chuàng)建線程對象后初始化正確的線程優(yōu)先級。當(dāng)用戶需要掛起運行線程時,通過公有方法Suspend設(shè)置線程掛起標(biāo)記,調(diào)用API函數(shù)SuspendThread掛起執(zhí)行線程。喚醒線程時,使用封裝了API函數(shù)Re-sumeThread的公有Resume方法實現(xiàn)。運行的線程是可以多次掛起和重新執(zhí)行的。

2.3線程間的同步

多個線程在同一進(jìn)程空間內(nèi)共享進(jìn)程資源帶來方便的同時,也不可避免的帶來各線程間的同步問題。在Delphi環(huán)境內(nèi),有些對象對于多線程應(yīng)用不一定是安全的,其中,帶Session部件的數(shù)據(jù)庫組件、圖形對象(如Tfont、Tpen、Canvas等)、對象的構(gòu)造和析構(gòu)本身、分配內(nèi)存等是線程安全的。而可視組件庫VCL中有關(guān)圖形設(shè)備接口GDI的屬性和方法不是線程安全的。

三、結(jié)束語

本文描述了多線程的概念及在Delphi環(huán)境中的多線程機(jī)制,剖析了Delphi的線程類的實現(xiàn)過程,為設(shè)計有關(guān)Delphi的相關(guān)程序打下了一定的基礎(chǔ)。

主站蜘蛛池模板: a毛片在线| 精品视频一区二区观看| 国产Av无码精品色午夜| 一本色道久久88亚洲综合| 国内精品视频| 国产精品亚欧美一区二区三区| 欧美午夜小视频| 精品国产一二三区| 色成人综合| 国产欧美精品一区aⅴ影院| 亚洲经典在线中文字幕| 国产小视频免费| 97在线国产视频| 国产精品第一区| аⅴ资源中文在线天堂| 2020亚洲精品无码| 男女精品视频| 亚洲三级色| 国产草草影院18成年视频| 东京热高清无码精品| 不卡网亚洲无码| 免费不卡视频| 国产免费羞羞视频| 久久动漫精品| 亚洲欧美另类色图| 免费福利视频网站| 极品国产一区二区三区| 无码'专区第一页| 青青青国产视频| 一级爆乳无码av| 无码专区在线观看| 狠狠做深爱婷婷综合一区| 另类专区亚洲| 国产经典三级在线| av在线5g无码天天| 亚洲VA中文字幕| 99久久国产综合精品2020| 国产精品久久久久婷婷五月| 欧美国产日产一区二区| 日本少妇又色又爽又高潮| 国产欧美日韩va| 综合天天色| 国产精品 欧美激情 在线播放| 国产视频大全| 欧美爱爱网| 爽爽影院十八禁在线观看| 亚洲91在线精品| 91亚洲精品国产自在现线| 日韩性网站| 亚洲 成人国产| 国产自在自线午夜精品视频| 日本一区中文字幕最新在线| 高清色本在线www| 日韩小视频在线播放| 最新亚洲人成网站在线观看| 亚洲欧美在线综合一区二区三区| 国产精品不卡永久免费| 国产午夜精品一区二区三区软件| 中文成人在线| 丁香婷婷在线视频| 久一在线视频| 亚洲第一区欧美国产综合 | 园内精品自拍视频在线播放| 国禁国产you女视频网站| 白丝美女办公室高潮喷水视频| 成人亚洲视频| 黄色污网站在线观看| 国产高清在线精品一区二区三区| 欧美亚洲香蕉| 国产精品亚欧美一区二区三区| 国产簧片免费在线播放| 国内精品小视频福利网址| 58av国产精品| 亚洲第一黄色网址| 久久免费观看视频| igao国产精品| 国产亚洲高清在线精品99| 97亚洲色综久久精品| 亚洲人成网站色7777| 第九色区aⅴ天堂久久香| 国产精品吹潮在线观看中文| 亚洲国产成人超福利久久精品|