0.多用異步通訊方式,個(gè)人一般開一個(gè)線程來監(jiān)視串口數(shù)據(jù)接收;
1.個(gè)人通常采用基于ComStat.cbInQue的循環(huán)查詢+WaitCommEvent等待EV_RXCHAR相結(jié)合的方式,循環(huán)查詢方式準(zhǔn)確,不丟失數(shù)據(jù),但占CUP時(shí)間,WaitCommEvent不占時(shí)間但只能讀取調(diào)用其后接到的字符.兩者結(jié)合,則可以互補(bǔ).必請醒的是,當(dāng)進(jìn)行連續(xù)數(shù)據(jù)串行數(shù)據(jù)時(shí),這種方式中的用WaitCommEvent來調(diào)整CUP占用時(shí)間的效果就要打折扣了,但面對多數(shù)時(shí)間內(nèi)不進(jìn)行的通信的應(yīng)用時(shí),這種方式就很有用;
2.在使用ClearCommError(m_hCom,&dwErrorFlags,&ComStat);前最好可以用Sleep(); 等待一段時(shí)間,試試吧!效果很好的;
3.使用權(quán)SetCommMask(m_hCom,EV_RXCHAR);來設(shè)置WaitCommEvent事件,用SetCommMask(m_hCom,0);來中止等待;
4.個(gè)人常在接收線程使用WaitForSingleObject(一個(gè)CEvent對象,0)來手工控制線程結(jié)束,通常是在等線程執(zhí)行超過一定時(shí)間后加以結(jié)束.注意CEvent對象默認(rèn)是一個(gè)自動(dòng)對象;
5.GetOverlappedResult和WaitForSingleObject主要區(qū)別是前期不能設(shè)置等待時(shí)間.注意這點(diǎn);
6.個(gè)人多PostMessage()及函數(shù)參數(shù)傳值的方式來傳遞接收來的數(shù)據(jù);