就是自己隨便做的筆記,可能對不起觀眾了。只是記錄了用的函數。具體使用方法還是看下msdn
創建CreateThread 參見msdn 要記得closehandle
mfc 創建線程 afxbeginthread
創建事件 createevent
等待函數WaitForSingleObject 自動事件有信號 經過等待函數變成無信號。
線程退出,寫在timer中 隔一段時間一檢測。可以用多等待 WaitForMultipleObjects返回WAIT_OBJECT_0時則為所有事件都為有信號狀態。
線程同步
臨界區法
定義臨界區CRITICAL_SECTION m_critical;
InitializeCriticalSection(&m_critical) 初始化臨界區
EnterCriticalSection(&(p->m_critical));進入
LeaveCriticalSection(&(p->m_critical));離開
DeleteCriticalSection(&m_critical)釋放
事件法
定義自動變換事件m_hEvent
WaitForSingleObject(m_hEvent,INFINITE);
//被保護的代碼
SetEvent(p->m_hEvent);
互斥對象法
穿件互斥對象 createmutex
等待函數WaitForSingleObject
//被保護的代碼
釋放互斥對象使用權ReleaseMutex
信號量 semaphore內核對象
CreateSemaphore(安全性,初始話信號量,最大信號量,name)
經過wait函數信號量減少
releaseSemaphore(句柄,信號增加量,【out】前個信號量)
利用事件判斷應用程序不能運用兩個
createevent的最后一個參數name 寫一個“唯一的”
然后再創建的這個時間 用“唯一的”這個名字 就會出錯
用getlasterror 能得到ERROR_ALREADY_EXISTS
整個過程應該在app 的init中進行