Koden nedenfor er også forkert!! Korrekt kode som ovenfor!!
Nogle gange skal vi kun tillade én instans af applikationen at køre, og når processen starter, hvis den opdager, at en instans af applikationen kører, stopper den automatisk. Vi implementerer det normalt i Main-funktionen via en Mutex-mutex, som normalt skrives:
Når vi leder efter svar, kommer og går vi ofte hurtigt og ignorerer Mutex' funktioner og forholdsregler. Efter en simpel test, OK, tag den og brug den. På dette tidspunkt overser vi en vigtig forudsætning:Mutex navngivningskonventioner. Ovenstående skrivemetode fungerer uden problemer under en enkelt bruger; Under multi-bruger kan hver bruger starte én instans, så en enkelt instans kan ikke garanteres.
Hvis du skal bruge det på en terminalserver og kun tillader én instans, så brug følgende metode:
Her er beskrivelsen af MSDN:
På servere, der kører terminaltjenester, kan navngivet systemmutex have to niveauer af synlighed. Hvis navnet starter med præfikset "Global\", er mutexen synlig i alle terminalserversessioner. Hvis navnet starter med præfikset "Local\", er mutexen kun synlig i terminalserversessionen, der oprettede den. I dette tilfælde kan hver anden terminalserversession på serveren have en separat mutex med samme navn. Hvis du opretter en navngivet mutex uden at specificere et præfiks, vil den tage præfikset "Local\". I en terminalserversession er to mutexer med forskellige navnepræfikser uafhængige mutex, og de to mutex er synlige for alle processer i terminalserversessionen. Det vil sige, præfiksnavnene "Global" og "Local" beskriver området for mutex-navnet i forhold til terminalserversessionen, ikke til processen.
|