COMMTIMEOUTS结构说明

在用ReadFile和WriteFile读写串行口时,需要考虑超时问题。如果在指定

的时间内没有读出或写入指定数量的字符,那么ReadFile或WriteFile的操

作就会结束。要查询当前的超时设置应调用GetCommTimeouts函数,该函数

会填充一个COMMTIMEOUTS结构。调用SetCommTimeouts可以用某一个

COMMTIMEOUTS结构的内容来设置超时。  
    有两种超时:间隔超时和总超时。间隔超时是指在接收时两个字符

之间的最大时延,总超时是指读写操作总共花费的最大时间。写操作只支

持总超时,而读操作两种超时均支持。用COMMTIMEOUTS结构可以规定读/写

操作的超时,该结构的定义为:  
  typedef   struct   _COMMTIMEOUTS   {    
  DWORD   ReadIntervalTimeout;   //   读间隔超时  
  DWORD   ReadTotalTimeoutMultiplier;   //   读时间系数  
  DWORD   ReadTotalTimeoutConstant;   //   读时间常量  
  DWORD   WriteTotalTimeoutMultiplier;   //   写时间系数  
  DWORD   WriteTotalTimeoutConstant;   //   写时间常量  
  }   COMMTIMEOUTS,*LPCOMMTIMEOUTS;  
    COMMTIMEOUTS结构的成员都以毫秒为单位。总超时的计算公式是: 

 
   
  总超时=时间系数×要求读/写的字符数   +   时间常量  
    例如,如果要读入10个字符,那么读操作的总超时的计算公式为: 

 
  读总超时=ReadTotalTimeoutMultiplier×10   +  

ReadTotalTimeoutConstant  
    可以看出,间隔超时和总超时的设置是不相关的,这可以方便通信

程序灵活地设置各种超时。  
    如果所有写超时参数均为0,那么就不使用写超时。如果

ReadIntervalTimeout为0,那么就不使用读间隔超时,如果

ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都为0,则不使

用读总超时。如果读间隔超时被设置成MAXDWORD并且两个读总超时为0,那

么在读一次输入缓冲区中的内容后读操作就立即完成,而不管是否读入了

要求的字符。  
    在用重叠方式读写串行口时,虽然ReadFile和WriteFile在完成操作

以前就可能返回,但超时仍然是起作用的。在这种情况下,超时规定的是

操作的完成时间,而不是ReadFile和WriteFile的返回时间。 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值