1.創建線程時先判斷線程是否已經被創建或者運行,代碼:
if (m_hThreadHandle==NULL) return false;
if (WaitForSingleObject(m_hThreadHandle,0)!=WAIT_TIMEOUT) return false;
關於函數WaitForSingleObject,請參考鏈接:點擊打開鏈接
這其中涉及到線程信號的概念:如果線程結束,則有信號,線程在運行,則沒有信號。
2.創建線程,調用函數_beginthreadex,判斷通過句柄線程是否創建成功
<span style="white-space:pre"> </span>tagThreadParameter ThreadParameter;
ZeroMemory(&ThreadParameter,sizeof(ThreadParameter));
//設置變量
ThreadParameter.bSuccess=false;
ThreadParameter.pServiceThread=this;
ThreadParameter.hEventFinish=CreateEvent(NULL,FALSE,FALSE,NULL);
//效驗狀態
ASSERT(ThreadParameter.hEventFinish!=NULL);
if (ThreadParameter.hEventFinish==NULL) return false;
//啓動線程
m_bRun=true;
m_hThreadHandle=(HANDLE)::_beginthreadex(NULL,0,ThreadFunction,&ThreadParameter,0,&m_uThreadID);
3.結束線程,關閉句柄,設置線程ID = 0。//等待事件
WaitForSingleObject(ThreadParameter.hEventFinish,INFINITE);
CloseHandle(ThreadParameter.hEventFinish);
4.線程執行函數:OnEventThreadRun()中增加while(true)死循環,處理響應的線程模塊邏輯。