Kode di bawah ini juga salah!! Kode yang benar seperti di atas!!
Terkadang kita hanya perlu mengizinkan satu instance aplikasi untuk berjalan, dan ketika proses dimulai, jika ditemukan bahwa instance aplikasi sedang berjalan, itu akan berhenti berjalan secara otomatis. Kami biasanya menerapkannya dalam fungsi Main melalui Mutex mutex, yang biasanya ditulis:
Ketika kita mencari jawaban, kita sering datang dan pergi dengan tergesa-gesa, mengabaikan fitur dan tindakan pencegahan Mutex. Setelah tes sederhana, oke, ambil dan gunakan. Pada titik ini, kami mengabaikan prasyarat penting:Konvensi penamaan mutex. Metode penulisan di atas bekerja tanpa masalah di bawah satu pengguna; Di bawah multi-pengguna, setiap pengguna dapat memulai satu instans, sehingga satu instans tidak dapat dijamin.
Jika Anda perlu menggunakannya di server terminal dan hanya mengizinkan satu instans, gunakan metode berikut:
Berikut adalah deskripsi dari MSDN:
Pada server yang menjalankan layanan terminal, mutex sistem bernama dapat memiliki dua tingkat visibilitas. Jika nama dimulai dengan awalan "Global\", mutex terlihat di semua sesi server terminal. Jika nama dimulai dengan awalan "Local\", mutex hanya terlihat di sesi server terminal yang membuatnya. Dalam hal ini, setiap sesi server terminal lainnya di server dapat memiliki mutex terpisah dengan nama yang sama. Jika Anda membuat mutex bernama tanpa menentukan awalan, itu akan mengambil awalan "Local\". Dalam sesi server terminal, dua mutex dengan awalan nama yang berbeda adalah mutex independen, dan dua mutex terlihat oleh semua proses dalam sesi server terminal. Artinya, nama awalan "Global" dan "Lokal" menggambarkan rentang nama muteks relatif terhadap sesi server terminal, bukan prosesnya.
|