4Fermer6
GodzilLe 16/07/2007 à 17:53
Acquisition d'un mutex global avec un nom précis et "unique" (genre NOMAPP_VERSION_BLABLA) et si impossible de l'acquerir tout de suite c'est qu'une autre instance de l'application est présente. Cette approche est multi OS et fiable a 99.999% du moment que les mutex existent sur la plateforme, et ne demande pas d'acceder au systeme de fichier (avec toutes les races conditions qu'on peut avoir)

Et si tu as besoin de dire a l'instance deja présente, tu peut utilsier une methode comme les named tube (que tu site en ./4) pour envoyer un message a l'instance de l'appli deja présente avec les parametres a prendre en compte.


L'idéal c'est par exemple pour les noms :
MUTEX_APPLI_VERSION_BLABLA
TUBE_APPLI_VERSION_BLABLA

comme ça en pseudo code

int main(int argc, char *argv)
{
 if ( CreateAndGetMutex("MUTEX_APPLI_VERSION_BLABLA") == E_CANTACQUIRE)
 {
   tube = ConnectTube("TUBE_APPLI_VERSION_BLABLA")
   SendTube(tube, MakeMessage(argc, argv))

   exit()
 }
 CreateTube("TUBE_APPLI_VERSION_BLABLA");
 RunApplication()
}