UINT COMReadThreadProc(LPVOID pParam) { …… file://設置讀端口線程執(zhí)行標志的標識 g_comthread.SetReadThreadKillFlag(FALSE); while(1) { file://讀取端口開啟狀態(tài)的標識 if(TRUE==g_comthread.GetCloseCOMFlag()) { g_comthread.SetReadThreadKillFlag(TRUE); return 0;//正常關閉 } file://讀端口操作 dwNeedRead=500; file://從端口讀取數據到緩存中 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的實例對象。這兩個類里都用類CCriticalSection m_Lock;實現了臨界區(qū)技術,用以保持線程間的同步。CCOMReadBuf類的兩個函數GetOneByte(……)、Add(……)分別用于從端口讀取一個字符和向緩沖區(qū)添加讀取的字符。其主要實現代碼如下: