venerdì 1 marzo 2019

Creare una singola istanza applicativa in Windows

Per consentire l'esecuzione di una singola istanza applicativa si può ricorrere all'utilizzo di un mutex. Un mutex è un oggetto che permette di avere accesso esclusivo ad una risorsa. Se l'oggetto mutex in questione è creato dandogli un nome questo verrà associato ad un oggetto di sistema ed il mutex sarà quindi visibile a livello di globale da più thread di processi differenti.
Sfruttando questa proprietà, insieme al  metodo CreateMutex, si può verificare se una istanza non sia già in esecuzione. CreateMutex infatti restituisce un HANDLE all'oggetto mutex creato che sarà uguale a ERROR_ALREADY_EXISTS se questo già esiste (si vedano [1] e [2]).


#include <Windows.h>
#include <iostream>
 
BOOL IsAlreadyRunning()
{
 HANDLE hMutex = NULL;
 hMutex = CreateMutex(NULLFALSETEXT("TEST"));
 
 if (hMutex)
 {
  if (ERROR_ALREADY_EXISTS == GetLastError())
   return TRUE;
 }
 
 return FALSE;
}
 
 
int wmain(int argcwchar_targv[])
{
 if (IsAlreadyRunning())
  std::cout << "Already Running!!!!\n";
 else
  std::cout << "First Run!\n";
 
 std::cout << "Press any key to exit!";
 std::getchar();
 
 return 0;
}


Riferimenti:
[1] Mutex
[2] CreateMutexA function

Nessun commento:

Posta un commento