再请教commtimeout的设置(100分)

L

liuyj

Unregistered / Unconfirmed
GUEST, unregistred user!
DWORD ReadTotalTimeoutMultiplier;
DWORD ReadTotalTimeoutConstant;
DWORD WriteTotalTimeoutMultiplier;
DWORD WriteTotalTimeoutConstant;
该怎样设置,谢谢!
 
ReadTotalTimeoutMultiplier

指乘数因子, in milliseconds, 用来计算整个读操作的超时时间. 对于每一个读操作,时间=乘数因子X读操作的字节数.

ReadTotalTimeoutConstant

指定一个常数用来计算所有的读操作超时。每一个读操作的超时(乘数因子X读操作的字节数)都要加上这个值。如果乘数因子和这个值=0,读操作不使用COMMTIMEOUTS。
同理可得:
WriteTotalTimeoutMultiplier,WriteTotalTimeoutConstant
是对写操作而言的。

 
超时有两种类型,
一种叫做区段超时(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),
那么函数立即返回,有多少返回多少。
 
多谢各位!
 
就这么完了?
 
对不起,昨天失误,请多多包涵!
 

Similar threads

回复
0
查看
660
不得闲
D
回复
0
查看
685
DelphiTeacher的专栏
D
D
回复
0
查看
672
DelphiTeacher的专栏
D
D
回复
0
查看
749
DelphiTeacher的专栏
D
顶部