WriteFile(hCom,m_send,dwCount,&dwCount,NULL);
ReadFile(hCom, pData, (DWORD)nLength, &dwNumRead, NULL);WriteFile与ReadFile WriteFile写入串口后怎么才能判断是否有返回值,如果立即ReadFile有时是返回不了值,怎么处理?即 WriteFile需要的写入成功或失败才返回,而ReadFile如果太快就取不了,WriteFile执行后的结果.
怎么处理,是否有等待WriteFile有返回结果的处理办法????

解决方案 »

  1.   

    原来的处理办法用Sleep 但都是不完美的,因为WriteFile后,不一定都是在固定的时间返回结果,或许3秒,或许5秒.或许8秒,这个要视设备的处理能力了.如果都定Sleep 8秒 会造成,执行快的3秒就完成了.那么工程其不是就浪费了5秒,影响了执行效率.
      

  2.   

    设置串口读取超时,例如设置成最大可能时间,
    WriteFile后使用同步读取方式调用ReadFile。
      

  3.   

    hCom = CreateFile(pPort, // 串口名称或设备路径
    GENERIC_READ | GENERIC_WRITE, // 读写方式
    0, // 共享方式:独占
    NULL, // 默认的安全描述符
    OPEN_EXISTING, // 创建方式
    0, // 不需设置文件属性
    NULL); // 不需参照模板文件这样创建的hCOM
    COMMTIMEOUTS timeouts = { // 串口超时控制参数
    1000, // 读字符间隔超时时间: 100 ms
    1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
    500, // 基本的(额外的)读超时时间: 500 ms
    100, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
    500}; // 基本的(额外的)写超时时间: 100 ms================================
    SetCommTimeouts(hCom, &timeouts); // 设置超时但还是在WriteFile并没有返回值的时候,ReadFile就开始在读取了.有没有办法判断,WriteFile是否已经有返回值?返回的时候有多少种状态?如正在执行,执行超时....?
      

  4.   

    打开的时候,属性使用FILE_ATTRIBUTE_NORMAL试试。
    读取之前,用PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);清空缓冲。
      

  5.   

    还是不行,
    如果ReadFile  PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); 还有返回值吗?ReadFile  是否是读的WriteFile写后的结果?如OK  ERROR 
      

  6.   

    ReadFile  是读的WriteFile的返回结果PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);  不是把返回的结果给清空了吗?
      

  7.   

    WriteFile是向串口写入数据,在串口连接的另一端设备可以读取到这个数据;
    ReadFile是从串口中读取数据,这个数据是另一端设备返回来的数据,并不是读取WriteFile返回值。必须另一端有软件或者设备发出数据来,你用ReadFile才能收到数据。
      

  8.   

    如何让ReadFile有值才执行下一句,现在编写 的是GSM  MODEL WriteFile后会返回 OK  或者ERROR 这个用超级终于可以看到返回的结果然后就是要读取这个OK 还是 ERROR验证是否发送成功
      

  9.   

    WriteFile函数本身不是有返回值么?BOOL型,可以判断发送是否成功啊。
    还是说我没理解你的意思?
      

  10.   

    commTimeOuts.ReadTotalTimeoutConstant    = 1500;//超时时间设长点
    或在W和R之间加Sleep
    要根据目标读取字符长度来判断sleep时间,读取越多的内容时间越长
      

  11.   

    // 现在编写 的是GSM MODEL WriteFile后会返回 OK 或者ERROR 这个用超级终于可以看到返回的结果
    // 把ReadFile的超时设置足够长就可以了。比如总超时时间设置为20s。
    // 还可以用异步方式,等待数据到达事件。
      

  12.   

    // 当然,异步方式,ReadFile的超时时间也要设置的足够长。
      

  13.   


    还可以用异步方式,等待数据到达事件  这种晚好,WriteFile后,一定要等待数据到达,不管是Error或是OK怎么Write Code??? 
      

  14.   

    一直ReadFile 串口怎么会有莫名其妙的字符?