串口设备吐出的数据量很大,很快,用Cport接收,收了几秒数据后就出错,后来加大缓冲区也没有效,应该怎样办呢?请指教!!!

解决方案 »

  1.   

    错误是CPort控件执行时Success := ReadFile(FHandle, Buffer, Count, BytesTrans, @AsyncPtr^.Overlapped) or (GetLastError = ERROR_IO_PENDING);
    返回False,是不是在事件OnComPortRxChar接收处理时还没有完,又来了数据呀?    还有个问题,当在接收过程中,我是把接收到的内容显示到Memo中,如果我最小化窗体,就立马出错,这又是为什么呢?
      

  2.   

    先用个慢一点的数据源调试串口看看  是否和串口吞吐量过大有关如果Memo引起错误就单建一个TStringList试试看
      

  3.   


    最小化窗体时,可能暂停对memo的操作,数据来的快,一暂停接收,就出错了。另外,你的Success := ... or ...逻辑有点看不懂,GetLastError = ERROR_IO_PENDING算是成功?
    还有,or的执行顺序还是分开写是不是明确一些:
    Success := ReadFile(FHandle, Buffer, Count, BytesTrans, @AsyncPtr^.Overlapped);
    if not Success then
      Success := (GetLastError = ERROR_IO_PENDING);