首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

线程读串口与自动应答效能疑问

2013-09-06 
线程读串口与自动应答功能疑问自动应答功能是想实现当选中自动应答复选框后串口有数据时,按照设定的时间向

线程读串口与自动应答功能疑问
自动应答功能是想实现当选中自动应答复选框后串口有数据时,按照设定的时间向串口发送数据,线程读串口代码:
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
while(true)
{  DWORD dwLength=0;
COMSTAT ComStat;
    DWORD dwErrorFlags=0;
DWORD SIZE;
unsigned char buff[22];
memset(buff, 0, sizeof(buff));
ClearCommError(hcom,&dwErrorFlags,&ComStat);
dwLength = ComStat.cbInQue ; 
if(dwLength>0)
{
bReadStat= ReadFile(hcom,buff,dwLength,&SIZE,NULL);

if(m_bDisplay)
{
CString temp;
m_ctrlMyRichEdit.ReplaceSel(_T("\r\n"));
SetTime();
if(dwLength==1)
{
temp.Format(_T("%02X "),buff[0]);
AppendText((BYTE*)temp.GetBuffer(0),20,RGB(255, 0,0));//输出数据}
else
{
for(int i=0;i< dwLength;i++)
{
temp.Format(_T("%02X "),buff[i]);
AppendText((BYTE*)temp.GetBuffer(0),24,RGB(255, 0,0));
}  
BuildData(buff);

}
}
//Sleep(500);//加这个也不能延时}
}
return 0;
}

定时器代码:
void CdriverDlg::OnTimer(UINT_PTR nIDEvent)
{
if(flag==TRUE)
{  if( bReadStat==1)//用读串口变量是否返回1来判断是否有数据,这里这样判断行吗?还有其他的判断方式吗?
{
if(nIDEvent == 1)
{
CString str;
int i=m_combox_rcv.GetCurSel();
m_combox_rcv.GetLBText(i,str);
switch(i)
{
case 0:
CardRemoved();
break;
                                   ...
} bReadStat=0;变量置0
}}}
现在的问题是我用串口助手模拟下位机向串口发送数据时,收到数据后定时向串口发送命令,但是定时发送的时间和设置的不一样,一般是比设置的快。比如我设置3秒发送指令,一般2秒就发了,有时更短,不稳定,怎么回事?感觉跟读串口时间有关,也尝试设了超时也解决不了
[解决办法]
“当选中自动应答复选框后串口有数据时,按照设定的时间向串口发送数据,”
时间 以 “串口有数据时” 为 起点 ?

热点排行