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