UINT COMReadThreadProc(LPVOID pParam) { …… file://設(shè)置讀端口線程執(zhí)行標(biāo)志的標(biāo)識 g_comthread.SetReadThreadKillFlag(FALSE); while(1) { file://讀取端口開啟狀態(tài)的標(biāo)識 if(TRUE==g_comthread.GetCloseCOMFlag()) { g_comthread.SetReadThreadKillFlag(TRUE); return 0;//正常關(guān)閉 } file://讀端口操作 dwNeedRead=500; file://從端口讀取數(shù)據(jù)到緩存中 if(!ReadFile(g_hCom,buf,dwNeedRead,&dwActRead,NULL)) { ClearCommError(g_hCom,&dwErrorMask,&comstat); PurgeComm(g_hCom,PURGE_RXCLEAR); continue; } file://讀字符加入到全局緩沖 g_comreadbuf.Add(buf,dwActRead); Sleep(1); } …… return 0; } |
其中用到的g_comthread和g_comreadbuf分別是線程類CCOMThread和讀端口類COMReadBuf的實(shí)例對象。這兩個(gè)類里都用類CCriticalSection m_Lock;實(shí)現(xiàn)了臨界區(qū)技術(shù),用以保持線程間的同步。CCOMReadBuf類的兩個(gè)函數(shù)GetOneByte(……)、Add(……)分別用于從端口讀取一個(gè)字符和向緩沖區(qū)添加讀取的字符。其主要實(shí)現(xiàn)代碼如下: