1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| N'autoriser que 'n' instances de l'application
program Project1;
uses
SysUtils,Windows,Dialogs,Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
const NbreProcess : Integer = 1; //Nbre maxi de processus autorisés.
SEMAPHORE_ALL_ACCESS = EVENT_ALL_ACCESS;
var HdleSem : THandle; //Handle du Sémaphore.
Count : Integer; //Nbre d'accès au Sémaphore dejà utilisés.
begin
HdleSem := OpenSemaphore(SEMAPHORE_ALL_ACCESS,true,'NomSem');//On essaie d'ouvrir le sémaphore.
if HdleSem=0 then begin //Si pas encore créé, c'est donc la 1ère instance et..
HdleSem := CreateSemaphore(nil,0,NbreProcess,'NomSem'); //..on le crée.
if HdleSem = 0 then begin //Si échec de la création..
ShowMessage('Erreur d''ouverture du sémaphore !') ;
Halt; //..on quitte.
end ;
end;
if not(releaseSemaphore(HdleSem,1,@count)) then begin //Si l'ajout d'un nouvel accès au Sémaphore échoue..
ShowMessage('Pas plus de ' + IntToStr(NbreProcess) + ' processus !'); //.. c'est que le nombre maxi est atteint et..
Halt; //..on quitte..
end ;
Application.Initialize; //..sinon la limitation n'est pas atteinte et on continue.
Application.CreateForm(TForm1, Form1);
Application.Run;
{Fonction d'attente qui décrémente le compteur du Sémaphore quand on supprime un des process.}
WaitForSingleObject(HdleSem,0) ;
END. |
Partager