控製程序的啟動數量(限制遊戲多開),數量多開

來源:互聯網
上載者:User

控製程序的啟動數量(限制遊戲多開),數量多開
引言:
在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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.