Starcraft II मुझे कई उदाहरणों को चलाने से प्रतिबंधित करता है, लेकिन अगर मैं सैंडबॉक्स में सैंडबॉक्स वाला दूसरा उदाहरण चलाता हूं , तो यह काम करता है। इसका क्या हिसाब हो सकता है?
मैं अपने खुद के खेलों के लिए इस व्यवहार को कैसे दोहरा सकता हूं?
Starcraft II मुझे कई उदाहरणों को चलाने से प्रतिबंधित करता है, लेकिन अगर मैं सैंडबॉक्स में सैंडबॉक्स वाला दूसरा उदाहरण चलाता हूं , तो यह काम करता है। इसका क्या हिसाब हो सकता है?
मैं अपने खुद के खेलों के लिए इस व्यवहार को कैसे दोहरा सकता हूं?
जवाबों:
Starcraft 2 के अलावा, इसका सामान्य उत्तर है: अधिग्रहण (और लॉक, यदि अधिग्रहण स्वयं पहले से ही लॉकिंग के बराबर नहीं है) ऑपरेटिंग सिस्टम से एक विशिष्ट संसाधन। यदि अधिग्रहण / लॉकिंग विफल रहता है तो गेम से बाहर निकलें। ऐसे संसाधनों के उदाहरण हैं:
शीर्ष-छोर पर, ग्राहक के रास्ते के लिए अधिकांश दर्द-इन-गधा, विशेष हार्डवेयर जो (कभी-कभी जरूरी, जैसे कुछ रोबोट नियंत्रण घटकों के लिए) केवल एक ही धागे से विशेष रूप से उपयोग किया जा सकता है, इस तरह से भी इस्तेमाल किया जा सकता है।
मैं म्यूटेक्स दृष्टिकोण की सलाह देता हूं, लेकिन:
एक अन्य विधि जो अक्सर उपयोग की जाती है, बस जाँच कर रही है कि क्या इसी नाम की एक अन्य प्रक्रिया चल रही है।
लाभ यह है कि यह हास्यास्पद रूप से आसान है - आपको फ़ाइल अनुमतियों के बारे में चिंता करने की ज़रूरत नहीं है या यह जानना है कि म्यूटेक्स क्या है। नकारात्मक पक्ष यह है कि, यदि मशीन पर चल रहा एक अलग प्रोग्राम कहा जाता है, तो आपको एक गलत-सकारात्मक मिलेगा starcraft2.exe
।
यदि आप C ++ और Windows API का उपयोग कर रहे हैं, तो एक तरीका जो आप कर रहे हैं, का उपयोग कर रहे हैं FindWindow
, जहां आप क्लास नाम और / या विंडो नाम जैसे पैरामीटर पास कर सकते हैं। फिर यदि आपको कोई मेल मिलता है, तो लोड करने या विंडो बनाने से पहले अपने प्रोग्राम से बाहर निकलें।