Empecher la multi-instance à l'aide d'un mutex :-)

Contenu du snippet

Bon, pour my first code sur codes sources, j'avais pas trop d'idée alors je commence par vous donner un moyen d'eviter que plusieurs instances d'une même application puissent etre en cicrculation au même moment...c'est à dire d'empecher qu'un meme programme soit lancé une 2ème fois si le premier lancement est encore actif!

Source / Exemple :


/* créer la classe CMutex dans le fichier Mutex.h */

#ifndef _MUTEX_H_
#define _MUTEX_H_

#if _MSC_VER > 1000
#pragma once
#endif

class CMutex {

 
   public:
   
     CMutex();
     CMutex(char* nom);
     virtual ~CMutex();
     
     bool ActiveMutex() const;
     void DesactiveMutex() const;
     void rename(char* new_nom);
     
   private:
   
     char* m_Nom;        
 };

#endif

/* fin de code...mnt le fichier Mutex.cpp a ajouter au projet ...... */

#include <windows.h>
#include "mutex.h"

CMutex::CMutex() {

  m_Nom = new char[lstrlen("NowelMutex") + 1];
  lstrcpy(this->m_Nom, "NowelMutex");
 }

CMutex::CMutex(char *nom) {

  m_Nom = new char[lstrlen(nom) + 1];
  lstrcpy(this->m_Nom, nom);
 }
 
CMutex::~CMutex() {

  delete m_Nom;
 }
 
bool CMutex::ActiveMutex() const {

  CreateMutex(NULL, TRUE, this->m_Nom);
  
  if (GetLastError() == ERROR_ALREADY_EXISTS)
   return false;
   
  return true; 
 }
 
void CMutex::DesactiveMutex() const {

  CreateMutex(NULL, FALSE, this->m_Nom);
 }
 
void CMutex::rename(char* new_nom) {

  delete [] m_Nom;
  m_Nom = new char[lstrlen(new_nom) + 1];
  lstrcpy(this->m_Nom, new_nom);
 } 

/* et voila !! */         

/* le code a mettre dans main.cpp par exemple */

#include "Mutex.h"
  
int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

CMutex* myMutex = new CMutex("MyApps");
   
   if (!(myMutex->ActiveMutex())) 
      ExitProcess(1);

  // autres instructions...
}

// voila, ben perso j'ai crée ce truc et je m'en sers maintenant tres souvent parce que c'est bien pratique ! Je n'ai pas trouvé de failles mais on sais jamais! lol !

Conclusion :


- Pas de bugs connus
- Source mise à jour the 13 octobre 2004 ! :-))

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.