Μέθοδος 1: Χρησιμοποιήστε μεταβλητές thread mutex. Ορίστε μεταβλητές mutex για να προσδιορίσετε εάν εκτελείται μια παρουσία. Αλλάξτε τη συνάρτηση Main() στο αρχείο program.cs στον ακόλουθο κώδικα:
Σημείωση: Στο πρόγραμμα, η δήλωση System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); για να δημιουργήσετε μια εκτέλεση μεταβλητής mutex, όπου "single_test" είναι το όνομα mutex και όταν επιστρέψει αυτή η μέθοδος, εάν δημιουργηθεί ένα τοπικό mutex ή ένα καθορισμένο σύστημα ονομασίας mutex, η δυαδική τιμή runone είναι αληθής. false εάν το καθορισμένο σύστημα ονομασίας mutexe υπάρχει ήδη. Τα επώνυμα mutexe είναι σε όλο το σύστημα. Μέθοδος 2: Χρησιμοποιήστε τον τρόπο κρίσης της διαδικασίας, πριν εκτελέσουμε το πρόγραμμα, βρίσκουμε εάν υπάρχει μια διαδικασία με το ίδιο όνομα στη διαδικασία και η θέση εκτέλεσης είναι επίσης η ίδια διαδικασία. Εφαρμόστε την κλάση Process στο χώρο ονομάτων System.Diagnostics στο C# για να την εφαρμόσετε, ο κύριος κώδικας είναι ο εξής: 1. Προσθέστε μια συνάρτηση στο αρχείο program.cs ως εξής:
2. Αλλάξτε τη συνάρτηση Main () στον ακόλουθο κώδικα:
Μέθοδος 3: Καθολική ατομική μέθοδος, πριν δημιουργήσετε ένα πρόγραμμα, ελέγξτε πρώτα τον παγκόσμιο ατομικό πίνακα για να δείτε εάν υπάρχει ένα συγκεκριμένο άτομο Α (προστέθηκε τη στιγμή της δημιουργίας) και σταματήστε να το δημιουργείτε όταν υπάρχει, υποδεικνύοντας ότι το πρόγραμμα έχει εκτελέσει μια παρουσία. Εάν δεν υπάρχει, εκτελέστε το πρόγραμμα και θέλετε να προσθέσετε ένα συγκεκριμένο άτομο Α στον παγκόσμιο ατομικό πίνακα. Κατά την έξοδο από το πρόγραμμα, θυμηθείτε να απελευθερώσετε ένα συγκεκριμένο άτομο Α, διαφορετικά δεν θα απελευθερωθεί μέχρι να απενεργοποιηθεί ο υπολογιστής. Η υλοποίηση C# έχει ως εξής: 1. Δηλώστε τη διεπαφή λειτουργίας WinAPI
[System.Runtime.InteropServices.DllImport("kernel32.dll")] δημόσιο στατικό εξωτερικό UInt32 GlobalAddAtom(String lpString); Προσθήκη ατόμων [System.Runtime.InteropServices.DllImport("kernel32.dll")] δημόσιο στατικό εξωτερικό UInt32 GlobalFindAtom(String lpString); Βρείτε άτομα [System.Runtime.InteropServices.DllImport("kernel32.dll")] δημόσιο στατικό εξωτερικό UInt32 GlobalDeleteAtom(UInt32 nAtom); Διαγραφή ατόμων 2. Τροποποιήστε τη συνάρτηση Main() ως εξής:
3. Προσθέστε τον ακόλουθο κώδικα στο συμβάν FormClosed: GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Διαγραφή ατομικού "jiaao_test" --------------------------------------*-------*--------*----------------------------------------------- Τα παραπάνω είναι η βασική γενική ιδέα της δημιουργίας ενός αμοιβαία αποκλειόμενου προγράμματος και προσωπικά πιστεύω ότι η πρώτη μέθοδος είναι η απλούστερη. |