麻烦来个大牛帮小弟我上吧,小弟我都换了几个号提了几次问了 关于ClearCommError的有关问题,先多谢了

麻烦来个大牛帮我下吧,我都换了几个号提了几次问了 关于ClearCommError的问题,先谢谢了!
C/C++ code

int __stdcall InQueCount(HANDLE ComHandle)
{
    if (ComHandle<0){return Bad_CommOpen;}
    COMSTAT CT;
    DWORD Error;
    ClearCommError(ComHandle,&Error, &CT);
    return (CT.cbInQue);
}



C/C++ code

SETTIMEOUT(TIME_NAK);
    do 
    {
        if (InQueCount(ComHandle) > 0) break;
    }while(!TIMEOUT);
    if (TIMEOUT)     return ERR;
    dlength=InQueCount(ComHandle);
    //Sleep(100);
    ReceiveData(ComHandle,ReceiveBuf,dlength);


C/C++ code

int __stdcall ReceiveData(HANDLE ComHandle,BYTE *ReceData, DWORD Number)
{
    if (ComHandle<0){return Bad_CommOpen;}
    DWORD m_Number=0;
    if(ReadFile(ComHandle,ReceData, Number, &m_Number,NULL)==0){return Bad_ReceiveData_ReadFile;}
    //if (Number!=m_Number){return Bad_ReceiveData_Len;}//接收数据长度不足(长度判断错误)
    return OK;
}



dlength的长度一直为8 实际的返回数据都是8个字节以上
我用Receivedata(Comhandle,ReceiveBuf,120) 可以一次把数据全部接收。但是这样速度很慢。跪求解决方法!!!!!

------解决方案--------------------
这个缓冲区最大好像也只能是16吧
------解决方案--------------------
COMMTIMEOUTS超时设置大一点,下位机用的是什么写的,arm几还是??sleep2秒可以接到全部,要不是你超时设置小了,要不是你下位机发送数据太慢了,自己多调试下。
------解决方案--------------------
从你上面给的代码看不出什么问题。
你发送命令的代码是什么、超时设置是怎么设置的、还有有没有试过用别的电脑的USB测试,有的时候不同型号电脑USB带宽不同,也会造成数据接收不稳定的,我前段时间就碰到过,还发了帖子问,原先用东芝笔记本的串转USB就很正常,换了个Sony的结果就出问题,后面试过好多笔记本,发现就sony的不行,你多试试
------解决方案--------------------
找对应的COMMTIMEOUTS原始结构
DWORD ReadIntervalTimeout; //-------设为0
DWORD ReadTotalTimeoutMultiplier; //设为0
DWORD ReadTotalTimeoutConstant; //只使用常数设为2000或多一些试试
DWORD WriteTotalTimeoutMultiplier;
DWORD WriteTotalTimeoutConstant;
------解决方案--------------------
你做串口通信自定义协议么?
如果不定协议确实很难控制的。
有了协议,你处理一帧数据,没传完可以等。数据太多可以分帧传数据。

你的问题就解决了