Starcraft II จำกัด ฉันไม่ให้เรียกใช้หลายอินสแตนซ์ แต่ถ้าฉันเรียกใช้อินสแตนซ์ที่สองที่sandboxed ใน Sandboxieมันใช้งานได้ สิ่งนี้อาจเป็นสาเหตุของอะไร
ฉันจะทำซ้ำพฤติกรรมนี้สำหรับเกมของตัวเองได้อย่างไร
Starcraft II จำกัด ฉันไม่ให้เรียกใช้หลายอินสแตนซ์ แต่ถ้าฉันเรียกใช้อินสแตนซ์ที่สองที่sandboxed ใน Sandboxieมันใช้งานได้ สิ่งนี้อาจเป็นสาเหตุของอะไร
ฉันจะทำซ้ำพฤติกรรมนี้สำหรับเกมของตัวเองได้อย่างไร
คำตอบ:
นอกเหนือจากสตาร์คราฟต์ 2 คำตอบทั่วไปของเรื่องนี้คือ: ได้รับ (และล็อคถ้าการได้มานั้นไม่เท่ากับการล็อค) ทรัพยากรเฉพาะจากระบบปฏิบัติการ ออกจากเกมหากการได้มา / การล็อคล้มเหลว ตัวอย่างของทรัพยากรดังกล่าวคือ:
บนสุดปลายสุดความเจ็บปวดในทางของลูกค้าฮาร์ดแวร์พิเศษซึ่ง (บางครั้งจำเป็นเช่นสำหรับส่วนประกอบการควบคุมหุ่นยนต์บางตัว) สามารถใช้งานได้โดยเธรดเดี่ยวเท่านั้นที่สามารถใช้วิธีนี้ได้เช่นกัน
ฉันแนะนำวิธี mutex แต่:
อีกวิธีที่ใช้บ่อยคือตรวจสอบว่ากระบวนการอื่นที่ใช้ชื่อเดียวกันนั้นกำลังทำงานอยู่หรือไม่
ข้อดีคือมันง่ายอย่างน่าขัน - คุณไม่ต้องกังวลกับการอนุญาตของไฟล์หรือรู้ว่า mutex คืออะไร ข้อเสียคือคุณจะได้รับการเท็จบวกถ้าแตกต่างกันโปรแกรมที่เรียกว่าstarcraft2.exe
กำลังทำงานอยู่บนเครื่อง
หากคุณใช้ C ++ และ Windows API วิธีหนึ่งที่คุณสามารถทำได้คือการใช้FindWindow
ซึ่งคุณสามารถส่งพารามิเตอร์เช่นชื่อคลาสและ / หรือชื่อหน้าต่าง จากนั้นหากคุณพบการแข่งขันเพียงออกจากโปรแกรมของคุณก่อนที่คุณจะโหลดหรือสร้างหน้าต่าง