cs_Stormy
Messages postés255Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention16 janvier 2007
-
23 juin 2004 à 23:36
cs_Stormy
Messages postés255Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention16 janvier 2007
-
24 juin 2004 à 22:37
Salut à tous.
Comment peut on faire pour qu'un processus ou une application ne soit exécuté deux fois en même temps. Celle-ci doit comprendre qu'il faut 'tuer' un processus de nom identique. Merci ++
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 24 juin 2004 à 01:04
Faisons le cas le + simple, tu as une fenetre principale dans ton prog. On enregistre son handle dans une section 'shared' et on verifie a l'ouverture si est != 0.
dans WinMain tout au debut:
if(IsAnotherProcess()) return 0;
ainsi 1 seule instance du prog tournera si c'est bien le meme exe a la meme place qui est relance. Si par contre tu veux fermer ancienne instance alors sera encore plus simple, te suffira de poster un WM_CLOSE.
---------------------------
Pour exe qui pourrait etre recopie a plusieurs endroits, c'est plus complique. Le mieux a mon avis est d'occuper un espace dans le fichier d'echange en faisant un appel CreateFileMapping avec un nom arbitraire, tu reserves la quantite voulue et tu y ranges le hprocess ou ce que tu veux, chaque instance du prog qui demarre verifie si ce filemap existe (OpenFileMapping) et traite en consequence.
MetalDwarf
Messages postés241Date d'inscriptionmardi 29 octobre 2002StatutMembreDernière intervention23 janvier 2006 24 juin 2004 à 15:31
Les reponses precedentes concernant windows, je te donne un element de reponse concernant Linux.
Le systeme le plus con et le plus "unixien" est d utiliser un simple fichier verrouille en ecriture toute la duree d execution du programme, et le programme tente d ecrire dans ce fichier au demarrage. SI ce n est pas possible, il quitte. Ce systeme est beaucoup utilise pour les demons, et les fichiers de verrouillage se trouvent dans /tmp/lock en general.
Sinon si il s agit d un programme que tu n as pas ecrit toit meme, alors regarde du cote des sources de killall (ou sinon fait un system("killall nom_du_processus");