控制程序的启动数量(限制游戏多开)

引言

在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;
}

执行结果

至于启动数量的限制,写在代码中显然不是一种优雅的做法,更通用的做法是通过启动程序的命令行參数传入程序。当限制程序数量须要改变时。仅修改命令行就可以达到要求。无需修改代码。

时间: 2024-10-06 00:52:54

控制程序的启动数量(限制游戏多开)的相关文章

游戏多开的原理

全面分析游戏防止多开的原理,与游戏实现多开的方法.进程隐藏,窗口标题修改,端口隐藏,多个游戏目录,多个操作系统账号,互斥体,内存映射文件,DLL全局共享等方法实现游戏多开.研究游戏多开已经有一年多的时间了,其实要实现游戏多开也不是一件很难的事情,只要大家懂得游戏防止多开的原理,然后根据其对应游戏多开的方法便可以做出游戏多开器来了.下面为大家总结一下游戏多开的原理与方法:用了一年的时间换来了这篇游戏多开的文章:如果大家需要转发的,请标明出处:小鱼工作室谢谢.第一,进程隐藏部分游戏通过探测游戏客户端

努力完成任务吧D--Pqq游戏多开大厅登陆器

单机游戏方面,UC表示,触控最新推出的王牌系列游戏<捕鱼达人3>,一经推出便受到无数玩家的热烈欢迎.当然这也源于"捕鱼达人"作为国内最知名的单机游戏品牌之一的强大影响力和众多铁杆粉丝的支持.cocos2d-x3.0引擎打造的全新3D画面给玩家带来了前所未有的震撼游戏体验,也让这款本文由休闲游戏提供,转载请注明出处http://cn16a03o.drr9.cn/,谢谢!的可玩性大大增强 喜欢寒冰皇的同学,赶紧照着多多推荐的天赋和性格去抓一只极品寒冰皇吧!第二页是喃喃酱为大家整

tomcat在eclipse启动成功却打不开tomcat主页

问题描述: 独立启动tomcat后在浏览器输入http://localhost:8080可以成功访问到tomcat主页,但是当在Eclipse中启动tomcat时,虽然启动成功,可以访问到自己所建项目的页面,如输入http://localhost:8080/MyProject/login.jsp可成功访问,但是,却访问不到http://localhost:8080主页. 解决方案: 首先,在Eclipse中window->preferences->server->Runtime Envi

红石榴庄园游戏app开发源码详解

红石榴庄园系统开发(梅饮君:188.1414.7927)红石榴庄园游戏开发,红石榴庄园app开发,红石榴庄园网页版,红石榴庄园复利拆分游戏,红石榴庄园源码,红石榴庄园模式,从人性角度思考,信息是人类获取互联网的最基本的需求,也就是类比食欲.社交对于人类来说属于第二个需求,所谓温饱思社交就是这个意思,因此社交网络是类比.合作是一种精神属性的行为,标志着人类进入了文明时代,因此子超把合作类比精神的层面.任何一个互联网产品的发展趋势都是先满足食欲,最后是精神的层面,我们判断未来的趋势也是可以这样类比判

游戏人工智能开发之6种决策方法

人工智能遵循着:感知->思考->行动 决策方法:有限状态机(Finite-State Machines),分层状态机(Hierarchical Finite-State Machines),行为树(Behavior Trees),效用系统(Utility Systems),目标导向型行动计划(Goal-Oriented Action  Planners),分层任务网络(Hierarchical Task Networks) 有限状态机 有限状态机是目前游戏AI中最常见的行为模型.状态机的代码简

游戏只开一个服务器

这点对于一个游戏的完整性(这个说法大概有些不能表达我的意思?)来讲,可能比较重要. 玩家也是游戏中很重要的资源,分散到多个服务器就是分散了游戏的资源.特别的,如果是一个mud类的游戏,玩家的存在会影响世界的格局,足够多的玩家才能让游戏达到更真实的世界,才不会被个别突出的玩家太多的决定世界的进程,当然,希特勒一般的牛人出现,那是谁也不能阻挡的,那时候也只能接受了. 只开一个服务器,会有两点阻力: 1 运营洗服盈利的需要——当游戏本身不行的时候,这就是救命的稻草. 2 服务器负载的限制——技术上的问

游戏多开,挂机,安卓模拟器多开选择的服务器-新乡BGP显卡物理机

新乡BGP自建机房.数据中心不仅是一个网络概念,还是一个服务概念,它构成了网络基础资源的一部分,提供了一种高端的数据传输服务和高速接入服务.数据中心提供给用户综合全面的解决方案,为政府上网.企业上网.企业IT管理提供专业服务,使得企业和个人能够迅速借助网络开展业务,把精力集中在其核心业务策划和网站建设上,而减少IT方面的后顾之忧.IDC改变了以往互联网的运作和经营模式,使得参加互联网的每一方都能专注其特长. 带显卡的物理机,国内为数不多呀,可以挂游戏,比如dnf,梦幻西游,完美世界,剑灵OL,仙

java程序在一个电脑上只启动一次,只开一个进程

方案1: 单进程程序可以用端口绑定.程序启动的时候可以尝试看该端口是否已经被占用,如果占用则程序已经启动. 方案2:你可以在java程序中创建一个隐藏文件,程序退出的时候删除这个文件.这样在程序启动的时候,你判断是否存在这个文件,如果存在说明已经启动. import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.channels.FileLock; /** *

游戏多开,挂机,安卓模拟器多开首选的服务器-带显卡的独立服务器

数据中心不仅是一个网络概念,还是一个服务概念,它构成了网络基础资源的一部分,提供了一种高端的数据传输服务和高速接入服务.数据中心提供给用户综合全面的解决方案,为政府上网.企业上网.企业IT管理提供专业服务,使得企业和个人能够迅速借助网络开展业务,把精力集中在其核心业务策划和网站建设上,而减少IT方面的后顾之忧.IDC改变了以往互联网的运作和经营模式,使得参加互联网的每一方都能专注其特长. 带显卡的物理机,可以挂游戏,比如dnf,梦幻西游,完美世界,剑灵OL,仙剑奇侠传,等多种游戏,手游端游页游都