我在百度上找了个串口发送和接受的例子:
for(;;)
{
bResult = ::ClearCommError(hComm,&dwError,&comstat);
if(comstat.cbInQue == 0)
continue;
//if(!::SetCommMask(hComm,EV_RXCHAR))
//continue;
if(bRead)
{
bResult = ::ReadFile(hComm,
&RXBuff,
1,
&BytesRead,
&m_ov);
可是当使用ClearCommError函数时,得到的cbInque总是为0,导致死循环。
然而使用SetCommMask函数可以得到缓冲区已经接收到数据 了,只是用下面的ReadFile函数读出的数据不正确,这个又是咋回事呢。。。。求解
------解决方案--------------------
你可以用一个线程来接受串口数据
------解决方案--------------------
找个串口类文件吧
谷歌一下,很多
实在没有,我给你发一个就是了。
------解决方案--------------------
可以考虑用Victor大牛的串口组件。
BTW:刚才我的回复哪里去了?负责审核的工作人员能给个解释吗?
------解决方案--------------------
不是机器人负责审核吗,还没那个人工智能做解释吧
------解决方案--------------------
剛才我大概看一下...因為其一是以永久循環迴路來做例子...其二是使用 Communicate 的 Overlapped 模式...所以在調試檢測通訊狀態或讀寫時並不會等待完成函數就直接離開...當然會導致死循環囉~ 實際的作法必須以計時器或多線程方式來輪詢......
SetCommMask 與 WaitCommMask 應該是匹配使用的...你所列出的例子其敘述並不是那麼完整...建議你把完整的例子給列出必較容易看出問題喔......
------解决方案--------------------
我给你一个串口程序你参照下 前不久刚写的 没问题
void __fastcall TMainForm::CreatComm()
{
Comm.hCom = CreateFile( g_strCommPort.c_str(),GENERIC_READ
------解决方案--------------------
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if ( Comm.hCom == INVALID_HANDLE_VALUE )
{
//ShowMessage("串口打开错误!");