首页 > 代码库 > 控制程序的启动数量(限制游戏多开)
控制程序的启动数量(限制游戏多开)
引言:
在PC端使用软件的过程中,有时开发者会有类似限制程序启动数量的需求,如限制某程序在单一PC端的启动数量,或是为了统计PC端启动的程序数量等,显然需要一种“计数器”来统计程序的运行数量。
如何对多个程序进行计数
在PC端使用软件的过程中,有时开发者会有类似限制程序启动数量的需求,如限制某程序在单一PC端的启动数量,或是为了统计PC端启动的程序数量等,显然需要一种“计数器”来统计程序的运行数量。
如何对多个程序进行计数
在启动多个程序时,由于程序隶属于不同的进程,常规的计数方法不能使用,那么如何统计程序的启动的数量成为了难题。
下面介绍一种常用的方法——使用互斥量:
运行结果
至于启动数量的限制,写在代码中显然不是一种优雅的做法,更通用的做法是通过启动程序的命令行参数传入程序,当限制程序数量需要改变时,仅修改命令行即可达到要求,无需改动代码。
#include "stdafx.h" #include "windows.h" #include <iostream> using namespace std; class MaxClientLimitInstance { public: static bool Lock(int MaxInstanceCount) { int ret = 0; for(int i = 0; i < MaxInstanceCount; ++i) { HANDLE h = ::CreateMutex(0, 1, L"test program"); if (GetLastError() == 0) { m_Handle = h; break; } else { CloseHandle(h); ret++; } } return ret < MaxInstanceCount; } static void UnLock() { if (m_Handle != NULL) { ReleaseMutex(m_Handle); CloseHandle(m_Handle); } } static HANDLE m_Handle; }; HANDLE MaxClientLimitInstance::m_Handle = 0; int _tmain(int argc, _TCHAR* argv[]) { int MaxNumber = 1; if (!MaxClientLimitInstance::Lock(MaxNumber)) { cout << "You have already run a program! This program will be closed." << endl; system("pause"); return 0; } else { cout << "Run program success! " << endl; } system("pause"); //< 等待用户输入,在游戏程序中可以对应理解为在游戏主循环中执行逻辑 MaxClientLimitInstance::UnLock(); //< 注意,要在“等待用户输入"之后ReleaseMutex,否则互斥量被释放,无法达到预期 return 0; }
运行结果
至于启动数量的限制,写在代码中显然不是一种优雅的做法,更通用的做法是通过启动程序的命令行参数传入程序,当限制程序数量需要改变时,仅修改命令行即可达到要求,无需改动代码。
控制程序的启动数量(限制游戏多开)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。