《星际争霸2》限制了我运行多个实例,但是如果我运行在Sandboxie中沙盒化的第二个实例,则它可以工作。这可能是什么原因?
如何为自己的游戏复制这种行为?
《星际争霸2》限制了我运行多个实例,但是如果我运行在Sandboxie中沙盒化的第二个实例,则它可以工作。这可能是什么原因?
如何为自己的游戏复制这种行为?
Answers:
除了《星际争霸2》外,对此的一般答案是:从操作系统中获取(并锁定(如果获取本身还不等同于锁定))。如果获取/锁定失败,请退出游戏。此类资源的示例是:
在高端方式上,对于客户而言,最痛苦的是,也只能以这种方式使用专用硬件(有时必须像某些机器人控制组件一样)只能由单个线程使用。
我建议使用互斥锁方法,但是:
经常使用的另一种方法是简单地检查是否正在运行同名的另一个进程。
优点是,它非常简单-您不必担心文件权限或知道什么是互斥体。不利的一面是,如果机器上正在运行另一个名为的程序,则您将得到假阳性starcraft2.exe
。
如果您使用的是C ++和Windows API,则可以使用的一种方法,您可以FindWindow
在其中传递类名和/或窗口名之类的参数。然后,如果找到匹配项,则在加载或创建窗口之前退出程序。