zoukankan      html  css  js  c++  java
  • 控制程序的启动数量(限制游戏多开)

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


    执行结果


    至于启动数量的限制,写在代码中显然不是一种优雅的做法,更通用的做法是通过启动程序的命令行參数传入程序。当限制程序数量须要改变时。仅修改命令行就可以达到要求。无需修改代码。
  • 相关阅读:
    设计模式学习总结系列应用实例
    【研究课题】高校特殊学生的发现及培养机制研究
    Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例
    python pro practice
    openstack python sdk list tenants get token get servers
    openstack api
    python
    git for windows
    openstack api users list get token get servers
    linux 流量监控
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7395296.html
Copyright © 2011-2022 走看看