超时有两种类型,
一种叫做区段超时(interval timeout);
一种叫做总超时(Total Timeout);
区段超时只使用于接受数据,即ReadIntervalTimeout,
它是指在从端口读数据时,只要超过ReadIntervalTimeout所指定的毫秒数,
而下一个字符还未来,就中断接受。
ReadTotalTimeoutMultiplier;
(读数据总超时因子,或者说平均读一字节的时间上限)
ReadTotalTimeoutConstant;
(读数据总超时常量,可以理解为:存在一个不随你读数据的多少而变化的时间,而ReadTotalTimeoutConstant指定的是这个时间的上限)
WriteTotalTimeoutMultiplier;
(写数据总超时因子,或者说平均写一字节的时间上限)
WriteTotalTimeoutConstant;(写数据总超时常量,同ReadTotalTimeoutConstant)
这四个都属于“总超时”类的参数,单位均为毫秒,
它们和总超时的关系依赖于如下的公式:
读数据总超时=ReadTotalTimeoutConstant + (ReadTotalTimeoutMultiplier*你要读的字节数)
写数据总超时=WriteTotalTimeoutConstant + (WriteTotalTimeoutMultiplier*你要写的字节数)
当你每次提出读或写数据的请求时,95/98/NT就根据这些参数和你所请求的字节数,
重新计算读数据总超时时间(写数据总超时时间),当超过此值,就超时返回。
对读数据,区段超时和总超时同时有效,出现任何一种超时,都会返回。
如果你将WriteTotalTimeoutMultiplier和WriteTotalTimeoutConstant都置为0,
那么直到将所有你提交的字符发完,函数才返回,即永不超时!!!(但这样不好)
同理可得读操作。
如果你将ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都置为0,
同时将ReadIntervalTimeout置为MAXDWORD(即-1或0xFFFFFFFF),
那么函数立即返回,有多少返回多少。