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

DELPHI中多線程研究

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

一、進程與線程

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

二、Delphi中的多線程機制

Delphi編譯環境的核心是可以直接調用幾乎所有的Windows API函數。通常是通過過程調用一系列外部模塊來實現,其最大的優點是利用面向對象的技術支持。通過對Delphi中類實現的源代碼分析,可以從中了解到類的構造過程及功能的實現,以便更有效的利用其提供的線程類完成多線程程序設計。

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

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

FatalException異常處理對象

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

Handle線程句柄

Priority線程優先級

ReturnValue線程返回值

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

Terminated布爾量,判斷線程是否需要結束

ThreadID線程全局唯一的標記

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

AfterConstruction對象創建后運行,重載自父類

Create創建線程對象構造器

Destroy釋放線程對象析構器

DoTerminate釋放線程前調用用戶的清除例程

Execute線程執行,虛類函數,子類需重載

Resume使線程重新執行

Suspend掛起運行線程

Synchronize線程間操作同步

Terminate置線程終止標記

WaitFor等待線程結束

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

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

onTerminate線程結束前調用的方法指針

2.1線程的創建、運行和終止

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

2.2線程的狀態切換操作

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

2.3線程間的同步

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

三、結束語

本文描述了多線程的概念及在Delphi環境中的多線程機制,剖析了Delphi的線程類的實現過程,為設計有關Delphi的相關程序打下了一定的基礎。

主站蜘蛛池模板: 久久大香香蕉国产免费网站| 欧洲精品视频在线观看| 91人妻日韩人妻无码专区精品| 高清码无在线看| 久久久久亚洲精品无码网站| 精久久久久无码区中文字幕| 精品无码国产一区二区三区AV| 国产在线小视频| 国产精品毛片一区| 97se亚洲综合在线韩国专区福利| 亚洲乱码在线播放| 亚洲第一天堂无码专区| 亚洲va精品中文字幕| 欧美性精品不卡在线观看| 亚洲首页在线观看| 日本五区在线不卡精品| 日韩经典精品无码一区二区| 欧美综合区自拍亚洲综合天堂 | 92午夜福利影院一区二区三区| 亚洲男人的天堂网| 国产综合无码一区二区色蜜蜜| 欧美中文字幕在线视频| 亚洲福利一区二区三区| 亚洲Av激情网五月天| 国产成人综合欧美精品久久 | 色综合a怡红院怡红院首页| 国产黄视频网站| 免费一极毛片| 91久久偷偷做嫩草影院电| 久久无码高潮喷水| 天天综合网亚洲网站| 色屁屁一区二区三区视频国产| 香蕉视频国产精品人| 丁香六月激情综合| 国产在线高清一级毛片| 深爱婷婷激情网| 亚洲高清中文字幕| 日本午夜精品一本在线观看 | 亚洲日韩久久综合中文字幕| 91免费国产在线观看尤物| 亚洲天堂久久| 青青草91视频| 91精品人妻互换| 在线观看国产黄色| 亚洲视频免| 国产成人狂喷潮在线观看2345 | 中文字幕无码中文字幕有码在线| 国产丝袜第一页| 成人综合网址| 亚洲h视频在线| 91丝袜美腿高跟国产极品老师| 欧美成人精品一区二区| 一区二区三区毛片无码| 亚洲视频影院| 国产一级毛片yw| 四虎亚洲精品| 国产欧美一区二区三区视频在线观看| 凹凸国产分类在线观看| 91在线免费公开视频| 玩两个丰满老熟女久久网| a在线亚洲男人的天堂试看| 中文字幕1区2区| 亚洲天堂久久新| www.av男人.com| 久久久久人妻一区精品色奶水| 亚洲色图欧美一区| 久草网视频在线| 日本午夜视频在线观看| 久久久久久久久18禁秘| 综合色亚洲| 午夜福利视频一区| 久久人妻xunleige无码| 免费国产高清视频| 午夜国产不卡在线观看视频| 一本无码在线观看| 亚洲无码不卡网| 狠狠躁天天躁夜夜躁婷婷| 国产亚洲精品自在线| 中字无码精油按摩中出视频| 国产成人91精品免费网址在线| 国产精品九九视频| 91娇喘视频|