Starcraft II membatasi saya untuk menjalankan banyak instance, tetapi jika saya menjalankan instance kedua sandbox di Sandboxie , ia berfungsi. Apa yang menyebabkan ini?
Bagaimana saya bisa meniru perilaku ini untuk permainan saya sendiri?
Starcraft II membatasi saya untuk menjalankan banyak instance, tetapi jika saya menjalankan instance kedua sandbox di Sandboxie , ia berfungsi. Apa yang menyebabkan ini?
Bagaimana saya bisa meniru perilaku ini untuk permainan saya sendiri?
Jawaban:
Selain dari Starcraft 2, jawaban umum untuk ini adalah: Memperoleh (dan mengunci, jika akuisisi itu sendiri belum setara dengan mengunci) sumber daya tertentu dari sistem operasi. Keluar dari game jika akuisisi / penguncian gagal. Contoh sumber daya tersebut adalah:
Di ujung atas, paling menyakitkan dalam hal pelanggan, perangkat keras khusus yang (kadang-kadang, seperti untuk beberapa komponen kontrol robot) hanya dapat digunakan secara eksklusif oleh satu utas dapat digunakan dengan cara ini juga.
Saya merekomendasikan pendekatan mutex, tetapi:
Metode lain yang sering digunakan adalah hanya memeriksa apakah proses lain dengan nama yang sama sedang berjalan.
Keuntungannya adalah sangat mudah - Anda tidak perlu khawatir tentang izin file atau tahu apa itu mutex. Kekurangannya adalah, Anda akan mendapatkan positif palsu jika berbeda program yang disebut starcraft2.exe
berjalan pada mesin.
Jika Anda menggunakan C ++ dan Windows API, salah satu cara yang dapat Anda lakukan adalah menggunakan FindWindow
, tempat Anda dapat melewatkan parameter seperti nama kelas dan / atau nama jendela. Kemudian jika Anda menemukan kecocokan, keluar saja dari program Anda bahkan sebelum Anda memuat atau membuat jendela.