Koden under er også feil!! Korrekt kode som over!!
Noen ganger må vi bare tillate én instans av applikasjonen å kjøre, og når prosessen starter, hvis den oppdager at en instans av applikasjonen kjører, vil den automatisk stoppe å kjøre. Vi implementerer det vanligvis i hovedfunksjonen via en Mutex-mutex, som vanligvis skrives:
Når vi leter etter svar, kommer og går vi ofte i all hast, og ignorerer funksjonene og forholdsreglene til Mutex. Etter en enkel test, OK, ta den og bruk den. På dette tidspunktet overser vi en viktig forutsetning:Mutex navnekonvensjoner. Skrivemetoden ovenfor fungerer uten problemer under én enkelt bruker; Under flerbruker kan hver bruker starte én instans, så én enkelt instans kan ikke garanteres.
Hvis du trenger å bruke det på en terminalserver og bare tillater én instans, bruk følgende metode:
Her er beskrivelsen av MSDN:
På servere som kjører terminaltjenester, kan navngitt systemmutex ha to nivåer av synlighet. Hvis navnet starter med prefikset "Global\", er mutexen synlig i alle terminalserversesjoner. Hvis navnet starter med prefikset "Local\", er mutexen kun synlig i terminalserver-sesjonen som opprettet den. I dette tilfellet kan hver annen terminalserversesjon på serveren ha en separat mutex med samme navn. Hvis du lager en navngitt mutex uten å spesifisere et prefiks, vil den ta prefikset "Local\". I en terminalserverøkt er to mutexer med forskjellige navneprefikser uavhengige mutex, og de to mutexene er synlige for alle prosesser i terminalserversesjonen. Det vil si at prefiksnavnene "Global" og "Local" beskriver området til mutex-navnet i forhold til terminalserversesjonen, ikke til prosessen.
|