rc = ReadFile(m_hCom,pTempBuf,pNetThreadParam->nBytes+1,&dwReadBytes,NULL);我的程序在2000下没问题,读到指定的大小,在98下有时候在这句话返回,可是读到的数据是0字节,请问ReadFile在什么情况下返回,为什么会读到0字节?

解决方案 »

  1.   

    呵呵,我判断了返回值,只不过没贴出来,只贴了这关键的一句话。
    主要是不知道在什么情况下函数返回:
    1.在试图ReadFile的时候,缓冲区没有数据,因此等到有串口写入数据才返回(刚写就返回0字节,还是读到所需的字节数才返回?)。
    2.在试图ReadFile的时候,缓冲区中有数据,但数据大小不够,是否继续等待?
    3.在试图ReadFile的时候,缓冲区中有足够数据,读了以后返回。是不是这样,哪位大虾能够描述一下读串口数据的情况。谢谢谢谢
      

  2.   

    你可以设置缓冲区中只要有数据,就ReadFile即可。
      

  3.   

    怎么设置啊,是哪个参数?另外,ReadFile和WriteFile串口读写,是同步好,还是异步好?
    我用的是同步,自己用的Event控制的线程,这样应该也没问题吧
      

  4.   

    异步不占用系统资源。
    while (true)
    {
      WaitCommEvent( hComDev, &dwEvtMask, &osWait);
      if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR)
      {
          while ( ThreadFlag )
         {
    ClearCommError( hComDev, &dwErrorFlags, &ComStat ) ;
             if((nLength = min( 0x1000, ComStat.cbInQue )) > 0 )//设置读取的字节数
    {
      if(ReadFile( hComDev, pb,nLength, &nLength, &osRead ))
      {