当一个特别操作的超时时间达到了,这个操作被放弃掉,也不会产生任何错误。
通过超时参数可以定义两种类型的超时时间。
一个间隔超时发生在:两个字节接受间隔超过特定时间。
一个总超时发生在:读操作超过了一定时间。这个计时从i/o操作开始时计时。
写操作只支持总超时。
读操作支持两种超时。
指定时间的单位都是ms。
几个参数:
[ReadInterval] —— 指定读间隔超时时间。
0 值 表示间隔超时时间没有被应用。
-1值 结合ReadTotalConstant和ReadTotalMultiplier都为0,指定读操作立即返回接收到的
字节,即便是没有任何字节。
[ReadTotalConstant] —— 指定总超时时间。
对每个读操作而言,这个值与ReadTotalMultiplier和字节数的乘积相加才是总超时时间。
如果ReadTotalMultiplier和ReadTotalConstant都是0,说明总超时时间没有被应用。
如果一个应用程序设定ReadInterval和ReadTotalMultiplier都为-1,并且设置
ReadTotalConstant大于0,会发生以下情况中的一种:
如果input buffer中有任何字节,读函数立即返回这些字节;
如果input buffer中没有字节,读函数等待字节,直到有字节到达,立即返回字节;
如果在ReadTotalConstant所设定的时间内,都没有字节返回,那么读操作超时。
[ReadTotalMultiplier] —— 指定read total timeout的乘子。
如果ReadTotalTimeout和ReadTotalConstant都为0值,说明总超时时间没有被应用。注意:如果都设为0,当连接失败时可能会导致死机。因为没有了超时检测。
[WriteTotalConstant] —— 指定常数,用于计算写操作的总超时时间。
对每个写操作而言,这个值与WriteTotalMultiplier和字节数的乘积相加才是从超时时间。
WriteTotalMultiplier和WriteTotalConstant都为0表示总超时时间对写操作没有应用。
[WriteTotalMultiplier] —— 指定write total timeout的乘子。
如果WriteTotalTimeout和WriteTotalConstant都为0值,说明总超时时间没有被应用。
我在我的《easyWatch2.0》中对 CPort 的超时设置是这样的:
ReadInterval := 20;
ReadTotalConstant := 2000;
ReadTotalMultiplier := 200;
WriteTotalConstant := 200;
WriteTotalMultiplier := 20;
Cport的Timeout属性定义了详细的读写超时设置。
当一个特别操作的超时时间达到了,这个操作被放弃掉,也不会产生任何错误。 通过超时参数可以定义两种类型的超时时间。 一个间隔超时发生在:两个字节接受间隔超过特定时间。 一个总超时发生在:读操作超过了一定时间。这个计时从i/o操作开始时计时。 写操作只支持总超时。 读操作支持两种超时。 指定时间的单位都是ms。 几个参数: [ReadInterval] —— 指定读间隔超时时间。 0 值 表示间隔超时时间没有被应用。 -1值 结合ReadTotalConstant和ReadTotalMultiplier都为0,指定读操作立即返回接收到的 字节,即便是没有任何字节。 [ReadTotalConstant] —— 指定总超时时间。 对每个读操作而言,这个值与ReadTotalMultiplier和字节数的乘积相加才是总超时时间。 如果ReadTotalMultiplier和ReadTotalConstant都是0,说明总超时时间没有被应用。 如果一个应用程序设定ReadInterval和ReadTotalMultiplier都为-1,并且设置 ReadTotalConstant大于0,会发生以下情况中的一种: 如果input buffer中有任何字节,读函数立即返回这些字节; 如果input buffer中没有字节,读函数等待字节,直到有字节到达,立即返回字节; 如果在ReadTotalConstant所设定的时间内,都没有字节返回,那么读操作超时。 [ReadTotalMultiplier] —— 指定read total timeout的乘子。 如果ReadTotalTimeout和ReadTotalConstant都为0值,说明总超时时间没有被应用。注意:如果都设为0,当连接失败时可能会导致死机。因为没有了超时检测。 [WriteTotalConstant] —— 指定常数,用于计算写操作的总超时时间。 对每个写操作而言,这个值与WriteTotalMultiplier和字节数的乘积相加才是从超时时间。 WriteTotalMultiplier和WriteTotalConstant都为0表示总超时时间对写操作没有应用。 [WriteTotalMultiplier] —— 指定write total timeout的乘子。 如果WriteTotalTimeout和WriteTotalConstant都为0值,说明总超时时间没有被应用。 我在我的《easyWatch2.0》中对 CPort 的超时设置是这样的: ReadInterval := 20; ReadTotalConstant := 2000; ReadTotalMultiplier := 200; WriteTotalConstant := 200; WriteTotalMultiplier := 20; |