win32線程編程思路

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)死循環,處理響應的線程模塊邏輯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章