📄 与上次的不同.txt
字号:
仍然是那段程序,就是在serial.cpp中的读操作中ReadThread函数,我省去了随机的那个临时缓冲区,这样可以少很多操作和节省空间,总之是节省了很多时间和空间,代码也短.
if(dwLength>0)//防止无故产生事件
{
//从串口读取数据
//读入数据,并返回数据长度,采用同步方式
fReadState=ReadFile(hPort,pbuf,dwLength,&dwLength,NULL);
if(!fReadState)
{
//不能从串口读取数据
MessageBox(NULL,TEXT("Can't fetch the data!"),TEXT("Reading Error!"),MB_OK);
}
else
{
dwLength=dwLength/2;//返回的数据是字节数,我们这里将其变为字符数
pbuf[dwLength]=NULL;//在其末尾设置字符串结尾
//以下将读入情况分为5种
//第一种,含有帧头和帧尾,且个数大于1,不用设置读入信息的状态readStatus
if (dwLength>1&&pbuf[0]==STR&&pbuf[dwLength-1]==STR)
{
pbuf[dwLength-1]=NULL;//在其末尾设置字符串结尾,去掉了帧尾,但保留了帧头
//向主对话框发送信息,告知已经接收到字符,可以显示
::SendMessage(m_hWnd,WM_COMM_RCHAR,(WPARAM)(fbuf+1),0);//+1为不显示帧头
}
//第二种,只有帧头,且个数大于1,//不向主对话框发送信息
else if (dwLength>1&&pbuf[0]==STR)
{
readStatus=TRUE;//只有帧头,表示正在读入数据
pbuf=fbuf+dwLength;//移动临时缓冲区指针到字符串末尾
pbuf[0]=NULL;//在其末尾设置字符串结尾
}
//第三种,只有帧尾,且个数大于1
else if (dwLength>1&&pbuf[dwLength-1]==STR)
{
pbuf=pbuf+dwLength-1;//移动临时缓冲区指针到字符串末尾
pbuf[0]=NULL;//在其末尾设置字符串结尾,去掉了帧尾
//向主对话框发送信息,告知已经接收到字符,可以显示
::SendMessage(m_hWnd,WM_COMM_RCHAR,(WPARAM)(fbuf+1),0);//+1为不显示帧头
pbuf=fbuf;//因为挪动了临时指针,需要复原,以备下次在用
readStatus=FALSE;//表示读入完毕
}
//第四种,不含有帧头和帧尾,只是纯数据
else if (pbuf[0]!=STR&&pbuf[dwLength-1]!=STR)
{
if (readStatus=TRUE)
{
pbuf=pbuf+dwLength;//移动临时缓冲区指针到字符串末尾
pbuf[0]=NULL;//在其末尾设置字符串结尾
}
}
//第五种,没有数据,只有帧标志
else if(dwLength=1&&pbuf[0]==STR)
if (readStatus=FALSE)//原来未开始,现在开始
readStatus=TRUE;
else
//原来已开始,现在结束,并向主对话框发送信息,告知已经接收到字符,可以显示
{
readStatus=FALSE;
::SendMessage(m_hWnd,WM_COMM_RCHAR,(WPARAM)(fbuf+1),0);
pbuf=fbuf;//因为挪动了临时指针,需要复原
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -