互斥体程序多开限制———源码
#include <windows.h>
#include <iostream>
using namespace std;
//#pragma comment(lib,"../win32/x64/Release/cLib.lib")
//RTL_CRITICAL_SECTION aa2 = {0};
//HANDLE Mutex = 0;
//HANDLE Event = 0;
//HANDLE Semaphore = 0;
DWORD g_value = 0;
int WINAPI thproc(void* a)
{
for (size_t i = 0; i < 10000000; i++)
{
//g_value++;
/* EnterCriticalSection(&aa2);
g_value++;
LeaveCriticalSection(&aa2);*/
//InterlockedIncrement(&g_value);
/* WaitForSingleObject(Mutex, 0);
g_value++;
ReleaseMutex(Mutex);*/
//WaitForSingleObject(Event, INFINITE);
ResetEvent(Event);
//SetEvent(Event);
//WaitForSingleObject(Semaphore,INFINITE);
g_value++;
//ReleaseSemaphore(Semaphore,1,NULL);
}
return 0;
}
#define DWORD long
extern "C"
{
int main()
{
//InitializeCriticalSection(&aa2);//创建线程许可证
HANDLE MutexHandle[10] = { 0 };
char ch1[] = "多开0";
char ch[20] = {0};
memcpy(ch, ch1,strlen(ch1));
int a = 0;
for (size_t i = 0; i < 10; i++)
{
ch[strlen(ch1)] = i +1+ ('1'-1);
MutexHandle[i] = CreateMutex(NULL, FALSE, ch);//创建互斥体
DWORD ErrorCode = 0;
ErrorCode = GetLastError();
if (ERROR_ALREADY_EXISTS == ErrorCode)
{
a++;
if (a>=3)//多开数量设置
{
return 0; //结束
}
}
else
{
break;
}
}
//Event = CreateEvent(NULL,FALSE,FALSE,NULL);//创建事件
// Semaphore = CreateSemaphore(NULL,1,10,NULL);//创建信号量
/* Thread[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)thproc,0,0,0);
Thread[1] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thproc, 0, 0, 0);
WaitForMultipleObjects(2, Thread, TRUE, INFINITE);*/
//CloseHandle(Mutex);
//CloseHandle(Event);
cout << "g_vale=" << 1000008 << endl;
getchar();
for (size_t i = 0; i < 10; i++)
{
if (MutexHandle[i])
{
CloseHandle(MutexHandle[i]);
}
}
return 0;
}
}