擴充套件Delphi的執行緒同步物件(1) (轉)

gugu99發表於2008-05-12
擴充套件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;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1003906/,如需轉載,請註明出處,否則將追究法律責任。

相關文章