#include <windows.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc(
LPVOID lpParameter //thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter //thread data
);
int tickets = 100,num = 0;
HANDLE g_hEvent;
void main()
{
HANDLE hThread1,hThread2;//創建線程的句柄
hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//創建一個線程
hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);//創建一個線程
CloseHandle(hThread1);//關閉句柄,並沒有終止新創建的線程
CloseHandle(hThread2);//關閉句柄,並沒有終止新創建的線程
//爲了線程間同步不要採用人工事件對象
g_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);//創建自動事件對象,初始狀態設置爲了非信號狀態
Sleep(8000);
CloseHandle(g_hEvent);
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter //thread data
)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);//申請事件對象,是否有信號
//ResetEvent(g_hEvent);
if (tickets > 0){
Sleep(100);
num++;
cout << "thread1 sell ticket : " << tickets-- << endl;
}
else{
cout << num << endl;
break;
}
SetEvent(g_hEvent);
}
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter //thread data
)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets > 0){
num++;
Sleep(1);
cout << "thread2 sell ticket : " << tickets-- << endl;
}
else{
cout << num << endl;
break;
}
SetEvent(g_hEvent);
}
return 0;
}