Codul de mai jos este și el greșit!! Codul corect de mai sus!!
Uneori trebuie să permitem rularea unei singure instanțe a aplicației, iar când procesul începe, dacă descoperă că o instanță a aplicației rulează, se va opri automat. De obicei o implementăm în funcția Main, folosind un mutex Mutex, care este de obicei scris:
Când căutăm răspunsuri, adesea venim și plecăm în grabă, ignorând caracteristicile și precauțiile Mutex. După un test simplu, OK, fă-l și folosește-l. În acest moment, trecem cu vederea o condiție importantă:Convențiile de denumire Mutex. Metoda de scriere de mai sus funcționează fără probleme sub un singur utilizator; În modul multi-utilizator, fiecare utilizator poate începe o instanță, deci o singură instanță nu poate fi garantată.
Dacă trebuie să-l folosești pe un server de terminal și permiți doar o singură instanță, folosește următoarea metodă:
Iată descrierea MSDN:
Pe serverele care rulează servicii terminale, mutex-ul de sistem denumit poate avea două niveluri de vizibilitate. Dacă numele începe cu prefixul "Global\", mutex-ul este vizibil în toate sesiunile serverului terminal. Dacă numele începe cu prefixul "Local\", mutex-ul este vizibil doar în sesiunea serverului terminal care l-a creat. În acest caz, fiecare altă sesiune de server terminal de pe server poate avea un mutex separat cu același nume. Dacă creezi un mutex numit fără a specifica un prefix, acesta va prelua prefixul "Local\". Într-o sesiune de server de terminal, două mutex-uri cu prefixe de nume diferite sunt mutex independente, iar cele două mutex sunt vizibile pentru toate procesele din sesiunea serverului de terminal. Adică, prefixele "Global" și "Local" descriu intervalul numelui mutex în raport cu sesiunea serverului terminal, nu față de proces.
|