Metode 1: Bruk trådmutex-variabler. Definer mutexvariabler for å avgjøre om en instans kjører. Endre Main()-funksjonen i program.cs-filen til følgende kode:
Merk: I programmet kjører setningen System.Threading.Mutex = ny System.Threading.Mutex (true, "single_test", out runone); for å lage en mutexvariabel kjør, hvor "single_test" er mutex-navnet, og når denne metoden returneres, hvis en lokal mutex eller et spesifisert navnesystem mutex opprettes, er boolean-verdien runone sann; falsk hvis det spesifiserte navnesystemet allerede eksisterer. Navngitte mutexer er systemomfattende. Metode 2: Bruk metoden for å vurdere prosessen, før vi kjører programmet, finner vi ut om det finnes en prosess med samme navn i prosessen, og kjøreposisjonen er også den samme prosessen. Bruk Process-klassen i System.Diagnostics-navnerommet i C# for å implementere den, hovedkoden er som følger: 1. Legg til en funksjon i program.cs-filen som følger:
2. Endre Main ()-funksjonen til følgende kode:
Metode 3: Global atomær metode, før du oppretter et program, sjekk først den globale atomtabellen for å se om det finnes et spesifikt atom A (lagt til ved opprettelse), og stopp opprettelsen når det eksisterer, noe som indikerer at programmet har kjørt en instans; Hvis den ikke finnes, kjør programmet og vil legge til et spesifikt atom A i den globale atomtabellen; Når du avslutter programmet, husk å slippe et spesifikt atom A, ellers slippes det ikke før datamaskinen er slått av. C#-implementeringen er som følger: 1. Deklarer WinAPI-funksjonsgrensesnittet
[System.Runtime.InteropServices.DllImport("kernel32.dll")] offentlig statisk ekstern UInt32 GlobalAddAtom (streng lpString); Legg til atomer [System.Runtime.InteropServices.DllImport("kernel32.dll")] offentlig statisk ekstern UInt32 GlobalFindAtom (streng lpString); Finn atomer [System.Runtime.InteropServices.DllImport("kernel32.dll")] offentlig statisk ekstern UInt32 GlobalDeleteAtom (UInt32 nAtom); Slett atomer 2. Modifiser Main()-funksjonen som følger:
3. Legg til følgende kode i FormClosed-hendelsen: GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Slett atomisk "jiaao_test" --------------------------------------*-------*--------*----------------------------------------------- Ovenstående er den grunnleggende generelle ideen om å lage et gjensidig utelukkende program, og jeg personlig mener at den første metoden er den enkleste. |