擴充套件Delphi的執行緒同步物件(1) (轉)
擴充套件Delphi的執行緒同步物件(1) (轉)[@more@]擴充套件的執行緒同步(1)
[ 作者: 於華 新增時間: 2001-5-5 18:01:08 ]
來源:
在編寫多執行緒應用時,最重要的是控制好執行緒間的同步資源訪問,以保證執行緒的執行。Win 32 提供了一組同步物件,如:訊號燈(Semaphore)、互斥(Mutex)、臨界區(CriticalSection)和事件(Event)等,用來解決這個問題。
Delphi分別將事件物件和臨界區物件封裝為Tevent物件和TcritialSection物件,使得這兩個物件的使用簡單且方便。但是如果在Delphi程式中要使用訊號燈或互斥等物件就必須藉助於複雜的 API,這對那些不熟悉Win32 API函式的人員來說很不方便。因此,筆者用Delphi構造了兩個類,對訊號燈和互斥物件進行了封裝(分別為TSemaphore和TMutex),希望對廣大Delphi程式設計人員有所幫助。
一、類的構造
我們先對Win32 API的訊號燈物件和互斥物件進行抽象,構造一個父類THandleEx,然後由這個父類派生出兩個子類Tsemphore和Tmutex。
類的如下:
unit SyncobjsEx;
interface
uses ,Messages,SysUtils,Classes,Syncobjs;
type
THandleObjectEx = class(THandleObject)
// THandleObjectEx為互斥類和訊號燈類的父類
protected
FHandle: THandle;
FLastError: Integer;
public
destructor Destroy; overr;
procedure Release;override;
function WaitFor(Timeout: D): TWaitResult;
property LastError:Integer read FLastError;
property Handle: THandle read FHandle;
end;
TMutex = class(THandleObjectEx)//互斥類
public
constructor Create(MutexAttributes: PSecurityAttributes; InitialOwner: Boolean;const Name:string);
procedure Release; override;
end;
TSemaphore = class(THandleObjectEx)
//訊號燈類
public
constructor Create(SemaphoreAttributes: PSecurityAttributes;InitialCount:Integer;MaximumCount: integer; const Name: string);
procedure Release(ReleaseCount: Integer=1;Previouunt:Pointer=nil);overload;
[ 作者: 於華 新增時間: 2001-5-5 18:01:08 ]
來源:
在編寫多執行緒應用時,最重要的是控制好執行緒間的同步資源訪問,以保證執行緒的執行。Win 32 提供了一組同步物件,如:訊號燈(Semaphore)、互斥(Mutex)、臨界區(CriticalSection)和事件(Event)等,用來解決這個問題。
Delphi分別將事件物件和臨界區物件封裝為Tevent物件和TcritialSection物件,使得這兩個物件的使用簡單且方便。但是如果在Delphi程式中要使用訊號燈或互斥等物件就必須藉助於複雜的 API,這對那些不熟悉Win32 API函式的人員來說很不方便。因此,筆者用Delphi構造了兩個類,對訊號燈和互斥物件進行了封裝(分別為TSemaphore和TMutex),希望對廣大Delphi程式設計人員有所幫助。
一、類的構造
我們先對Win32 API的訊號燈物件和互斥物件進行抽象,構造一個父類THandleEx,然後由這個父類派生出兩個子類Tsemphore和Tmutex。
類的如下:
unit SyncobjsEx;
interface
uses ,Messages,SysUtils,Classes,Syncobjs;
type
THandleObjectEx = class(THandleObject)
// THandleObjectEx為互斥類和訊號燈類的父類
protected
FHandle: THandle;
FLastError: Integer;
public
destructor Destroy; overr;
procedure Release;override;
function WaitFor(Timeout: D): TWaitResult;
property LastError:Integer read FLastError;
property Handle: THandle read FHandle;
end;
TMutex = class(THandleObjectEx)//互斥類
public
constructor Create(MutexAttributes: PSecurityAttributes; InitialOwner: Boolean;const Name:string);
procedure Release; override;
end;
TSemaphore = class(THandleObjectEx)
//訊號燈類
public
constructor Create(SemaphoreAttributes: PSecurityAttributes;InitialCount:Integer;MaximumCount: integer; const Name: string);
procedure Release(ReleaseCount: Integer=1;Previouunt:Pointer=nil);overload;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1003906/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用Delphi編寫IE擴充套件 (轉)套件
- Springboot執行緒池的使用和擴充套件Spring Boot執行緒套件
- DELPHI下的多執行緒程式設計(1) (轉)執行緒程式設計
- 利用Delphi編寫Windows外殼擴充套件 (轉)Windows套件
- 實戰 | 執行緒池的幾種自定義擴充套件執行緒套件
- 利用Delphi編寫IE擴充套件套件
- 什麼時候執行緒不安全?怎樣做到執行緒安全?怎麼擴充套件執行緒安全的類?執行緒套件
- 充分利用Windows API擴充套件Delphi函式 (轉)WindowsAPI套件函式
- WCF擴充套件:行為擴充套件Behavior Extension套件
- ES6 物件的擴充套件物件套件
- es6-物件擴充套件物件套件
- 擴充套件javascript原生物件套件JavaScript物件
- 執行緒同步的一些常見模式(1) (轉)執行緒模式
- 擴充套件你的STRUTS (轉)套件
- 執行緒同步(windows平臺):互斥物件執行緒Windows物件
- VC++ 執行緒同步(轉)C++執行緒
- Laravel 執行時類的功能擴充套件的實現Laravel套件
- 併發程式設計之執行緒池的使用及擴充套件和優化程式設計執行緒套件優化
- 【進階之路】執行緒池擴充與CompletionService操作非同步任務執行緒非同步
- JavaScript 原生物件及擴充套件JavaScript物件套件
- JavaScript String 物件擴充套件方法JavaScript物件套件
- DELPHI下的多執行緒程式設計(2) (轉)執行緒程式設計
- 擴充套件方法(1) DataTable 和List 相互轉換套件
- 執行緒的同步執行緒
- .NET多執行緒程式設計(3):執行緒同步 (轉)執行緒程式設計
- POSIX執行緒程式設計起步(2)-執行緒同步 (轉)執行緒程式設計
- Posix執行緒程式設計指南(3)-執行緒同步 (轉)執行緒程式設計
- 1、多執行緒同步——CPU、core核、執行緒、記憶體執行緒記憶體
- Web應用擴充套件系列(2):如何確定Web應用執行緒池的大小Web套件執行緒
- Java執行緒:執行緒的同步與鎖Java執行緒
- delphi的物件導向之路1 (轉)物件
- JAVA學習55-執行緒同步及JUC安全集合擴充知識Java執行緒
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- c#執行緒-執行緒同步C#執行緒
- 執行緒同步及執行緒鎖執行緒
- 在IIS7上執行PHP功能擴充套件PHP套件
- 執行緒同步執行緒
- STL中的棧的擴充套件 (轉)套件