mens en Mutex kan brukes til å tillate bare en enkelt forekomst av programmet ditt, kan en Semaphore bruke til å tillate en bestemt number.Creating semaphoresA semafor er opprettet ved hjelp vinduene CreateSemaphore API command.HANDLE CreateSemaphore (LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, //sikkerhets attributter LONG lInitialCount, //innledende teller LONG lMaximumCount, //maksimale antallet LPCTSTR lpName //peker til semafor-objekt navn); ExampleHSemaphore: = CreateSemaphore (null, MaximumInstances, MaximumInstances, PChar (UniqueName)); Unikt navn må være en Windows- bred unik identifikator, anbefaler jeg at du bruker CompanyName.ProductName, eller enda en GUID (Trykk CTRL + SHIFT + G for å generere en GUID på design tid) .Her er en klasse wrapper for en semafor, opprette en forekomst av klassen og bruk . LOCK å bruke en reservert plass og låse opp for å slippe den  enhet 
 semaforer;  grensesnitt 
  bruker 
 Windows, SysUtils;  konst 
 cSemaphoreCannotCreate = 'ikke Can skape semafor ';  skriv 
 ESemaphoreError =  klasse 
 (Unntak); TSemaphore =  klasse 
  privat 
 HSemaphore: THandle; Flokket: Boolean;  offentlig 
  Constructor 
 Lag (UniqueName:  string 
; MaximumInstances: Integer);  virtuell 
;  destructor 
 Destroy;  styre 
;  funksjon 
 Lock (aTimeoutMilliseconds: DWORD): boolsk;  prosedyre 
 UnLock;  eiendom 
 Låst: Boolean  Les 
 strømmet;  end 
; gjennomføringen {TSemaphore} konstruktør TSemaphore.Create (UniqueName: String; MaximumInstances: integer); begynne arvet Opprett; Flokket: = False; HSemaphore: = 0; HSemaphore: = CreateSemaphore (null, MaximumInstances, MaximumInstances, PChar (UniqueName)); hvis HSemaphore = 0 deretter heve ESemaphoreError.Create (cSemaphoreCannotCreate); ende; destructor TSemaphore.Destroy; begynne UnLock; arvet; ende, funksjons TSemaphore.Lock (aTimeoutMilliseconds: DWORD): boolske; Var Res: Integer; begynne Res: = WaitForSingleObject (hSemaphore, aTimeoutMilliseconds); Resultat: = (Res i [WAIT_ABANDONED, WAIT_OBJECT_0]); Hvis resultatet deretter strømmet: = true; ende; prosedyre TSemaphore.UnLock; begynne hvis ikke låst og avslutter; ReleaseSemaphore (hSemaphore, en, null); end; end 
.
Semaphores
Next Page:Win9x Services 
			 
        
