Les Snippets

Connexion

N'autoriser que 'n' instances de l'application

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 11/01/2008 16:55:27 et initié par Caribensila [Liste]
Vue : 1488
Catégorie(s) : Système
Langages dispo pour ce code :
- Delphi 5
- Voir tous les langages pour ce code snippet



Langage : Delphi 5
Date ajout : 11/01/2008
Posté par Caribensila [Liste]

Ce code est logiquement placé dans le source du projet afin qu'il soit exécuté avant même la création de la Form. Mais il pourrait être placé dans le FormCreate.

program Project1;

uses
  SysUtils,Windows,Dialogs,Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}


const NbreProcess : Integer = 3; //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.


Remarque :
Merci à mon sauveur, WhiteHippo, qui m'a tendu la main alors que je me noyais lamentablement dans mon Sémaphore ;)

Snippets en rapport avec : Instance, Processus, Process, Sémaphore, Waitforsingleobject



Codes sources en rapport avec : Instance, Processus, Process, Sémaphore, Waitforsingleobject

{Visual Basic, VB6, VB.NET, VB 2005} CONTROL_PROCESS PROCESS_VIEWER
c'est un ensemble de code source que g assembler et compiler il permet de voir grace à des fichiers...

{C# / C#.NET} INSTANCE UNIQUE + COMMUNICATION DE MESSAGES (COMPATIBLE 32 ET 64 BIT)
Cette DLL permet d'avoir une instance unique d'un programme en plus de permettre: 1. La communicat...

{C / C++ / C++.NET} PROCESS DUMPER
Bonjour/Bonsoir, le titre de l'article parle de lui-même... Ce code montre comment faire un dump d'...

{Visual Basic, VB6, VB.NET, VB 2005} CLM'S EMERGENCY : REFROIDISSEUR DE CPU
J'ai créé cette appli car j'en avais marre que mon pc s'éteigne subitement quand mon processeur chau...

{Visual Basic, VB6, VB.NET, VB 2005} PROCESSVIEWER VBSYSLIB - UN VISUALISATEUR DE PROCESSUS COMPLET ET SIMPLE
Bonjour à tous, Voici ProcessViewer VbSysLib, un explorateur de processus réalisé à partir de la ...

{C / C++ / C++.NET} MODIFIER UN PROCESSUS EN MÉMOIRE
Ce code permet d'accéder à un processus actif et de modifier son contenu grace aux APIs ReadProcessM...

{Visual Basic, VB6, VB.NET, VB 2005} PROCESSVIEW ==> ARBORESCENCE AFFICHANT LES PROCESSUS LANCES (+ PERMET DE RECUPERER INFOS...)
Salut, bon bah tant qu'à faire, après mes FileView et DriveView, je poste mon "ProcessView" ;) C'...

{Visual Basic, VB6, VB.NET, VB 2005} PROCESSPRIORITY
Ceci est une petite source pour modifier la valeur de priorité d'un processus. Le module est a la ba...

{C / C++ / C++.NET} TUEUR DE PROCESSUS
vous pouvez arrêtez certains processus mais pas les procesus system parce que vous aurrez besoin d'u...

{Visual Basic, VB6, VB.NET, VB 2005} LIBRAIRIE DE NOMBREUSES FONCTIONS POUR AGIR SUR LES FENETRES, PROCESSUS ET THREADS
Bonjour à tous, voilà je vous présente une source qui m'est très très utile en ce qui me concerne...