事件

//事件和互斥體的區別在於,互斥體創建即爲已通知狀態,而事件初始狀態可以設置,即第三個參數
//第二個參數如果爲TRUE,事件被捕捉後,需要自己調用ResetEvent將事件標記爲未通知,如果爲False,會自動調用ResetEvent將事件標記爲未通知
//			
1、事件對象的創建				
				
HANDLE CreateEvent(				
  LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全屬性 NULL時爲系統默認				
  BOOL bManualReset,                       // TRUE 通過調用ResetEvent將事件對象標記爲未通知				
  BOOL bInitialState,                      // TRUE 已通知狀態  FALSE未通知狀態				
  LPCTSTR lpName                           // 對象名稱 以NULL結尾的字符串				
);				
				
				
2、事件對象的控制				
				
BOOL SetEvent(HANDLE hEvent);				       //將對象設置爲已通知
				
3、關閉時間對象句柄				
				       //關閉句柄
CloseHandle();				
				
				
4、線程控制實驗:只讀形式的線程控制				
				
HANDLE g_hEvent;				
				
HWND hEdit1;				
HWND hEdit2;				
HWND hEdit3;				
HWND hEdit4;				
HANDLE hThread1;				
HANDLE hThread2;				
HANDLE hThread3;				
HANDLE hThread4;				
				
DWORD WINAPI ThreadProc1(LPVOID lpParameter)				
{				
	//創建事件			
	//默認安全屬性  手動設置未通知狀態(TRUE)  初始狀態未通知 沒有名字 			
	g_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);			
	HANDLE hThread[3];			
	//創建3個線程			
	hThread[0] = ::CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL);			
	hThread[1] = ::CreateThread(NULL, 0, ThreadProc3, NULL, 0, NULL);			
	hThread[2] = ::CreateThread(NULL, 0, ThreadProc4, NULL, 0, NULL);			
				
	//設置文本框的值			
	SetWindowText(hEdit1,"1000");			
				
	//設置事件爲已通知			
	SetEvent(g_hEvent);			
				
	//等待線程結束 銷燬內核對象			
	WaitForMultipleObjects(3, hThread, TRUE, INFINITE);  			
	CloseHandle(hThread[0]);  			
	CloseHandle(hThread[1]);			
	CloseHandle(hThread[2]);			
	CloseHandle(g_hEvent);  			
				
	return 0;			
}				
				
DWORD WINAPI ThreadProc2(LPVOID lpParameter)				
{				
	TCHAR szBuffer[10] = {0};			
				
	//當事件變成已通知時 			
	WaitForSingleObject(g_hEvent, INFINITE);			
				
	//讀取內容			
	GetWindowText(hEdit1,szBuffer,10);			
				
	SetWindowText(hEdit2,szBuffer);			
				
	return 0;			
}				
DWORD WINAPI ThreadProc3(LPVOID lpParameter)				
{				
	TCHAR szBuffer[10] = {0};			
				
	//當事件變成已通知時 			
	WaitForSingleObject(g_hEvent, INFINITE);			
				
	//讀取內容			
	GetWindowText(hEdit1,szBuffer,10);			
				
	SetWindowText(hEdit3,szBuffer);			
				
	return 0;			
}				
DWORD WINAPI ThreadProc4(LPVOID lpParameter)				
{				
	TCHAR szBuffer[10] = {0};			
				
	//當事件變成已通知時 			
	WaitForSingleObject(g_hEvent, INFINITE);			
				
	//讀取內容			
	GetWindowText(hEdit1,szBuffer,10);			
				
	SetWindowText(hEdit4,szBuffer);			
				
	return 0;			
}				
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章