#include <windows.h>
#include <iostream>
using namespace std;
// HANDLE CreateThread(
// LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
// DWORD dwStackSize, // initial thread stack size
// LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
// LPVOID lpParameter, // argument for new thread
// DWORD dwCreationFlags, // creation flags
// LPDWORD lpThreadId // pointer to receive thread ID
// );
DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
);
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
);
//int index=0;
int tickets=100;
HANDLE hMutex;
int main(){
hMutex=CreateMutex(NULL,TRUE,"tickets");
if(hMutex){
if(ERROR_ALREADY_EXISTS == GetLastError()){
cout<<"已经有一个实例在运行"<<endl;
getchar();
return 0;
}
}
WaitForSingleObject(hMutex,INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex);
//Thread1
HANDLE hThread1;
//CREATE_SUSPENDED意为创建时挂起,等待唤醒 ResumeThread()
//0 意为创建后立即执行
//hThread1 = CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
hThread1 = CreateThread(NULL,0,ThreadProc1,NULL,CREATE_SUSPENDED ,NULL);
//Thread2
HANDLE hThread2;
//hThread2 = CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
hThread2 = CreateThread(NULL,0,ThreadProc2,NULL,CREATE_SUSPENDED ,NULL);
ResumeThread(hThread1);
ResumeThread(hThread2);
while(tickets>0){ //票没有卖完
Sleep(10);
}
CloseHandle(hThread1);
CloseHandle(hThread2);
cout<<"main exit."<<endl;
/*while(index++<1000){
cout<<index<<"main is running"<<endl;
Sleep(5);
}*/
//Sleep(10);
getchar();
return 0;
}
DWORD WINAPI ThreadProc1(LPVOID lpParameter){
while(tickets>0){
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0){
Sleep(5);
cout<<"thread1 sells :"<<tickets -- <<endl;
}
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParameter){
while(tickets>0){
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0){
Sleep(1);
cout<<"thread2 sells :"<< tickets -- <<endl;
}
ReleaseMutex(hMutex);
}
return 0;
}