Starcraft II ogranicza mnie do uruchamiania wielu instancji, ale jeśli uruchomię drugą instancję w piaskownicy w Sandboxie , to zadziała . Co może to tłumaczyć?
Jak mogę powtórzyć to zachowanie dla własnych gier?
Starcraft II ogranicza mnie do uruchamiania wielu instancji, ale jeśli uruchomię drugą instancję w piaskownicy w Sandboxie , to zadziała . Co może to tłumaczyć?
Jak mogę powtórzyć to zachowanie dla własnych gier?
Odpowiedzi:
Oprócz Starcraft 2 ogólna odpowiedź na to pytanie: Zdobądź (i zablokuj, jeśli samo nabycie nie jest już równoważne zablokowaniu) określonego zasobu z systemu operacyjnego. Wyjdź z gry, jeśli akwizycja / blokowanie się nie powiedzie. Przykładami takich zasobów są:
Na najwyższym poziomie, najbardziej uciążliwym dla klienta, specjalistyczny sprzęt, który (czasami koniecznie, jak w przypadku niektórych robotycznych elementów sterowania) może być używany tylko przez jeden wątek, może być również używany w ten sposób.
Polecam podejście mutex, ale:
Inną często używaną metodą jest po prostu sprawdzenie, czy działa inny proces o tej samej nazwie.
Zaletą jest to, że jest to absurdalnie łatwe - nie musisz martwić się o uprawnienia do plików ani wiedzieć, czym jest muteks. Minusem jest to, że otrzymasz fałszywie dodatni, jeśli na komputerze działa inny program o nazwie starcraft2.exe.
Jeśli używasz C ++ i Windows API, jednym ze sposobów jest użycie FindWindow, w którym możesz przekazać parametry takie jak nazwa klasy i / lub nazwa okna. Następnie, jeśli znajdziesz dopasowanie, po prostu zamknij program, zanim jeszcze załadujesz lub utworzysz okno.