123456

 

INFINITE解释和怎么WaitForSingleObject超时大于0x7FFFFFFF

原码:原码表示法在数值前面 增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数,其余位表示数值的绝对值大小。

反码:正数的反码与其原码相同,负数的反码是对其原码逐位取反,但符号位除外。

补码:正数的补码与其原码相同,负数的补码是在其反码的末位加1。

例如,我们用8位二进制表示一个数,+11的原码反码补码都为00001011,-11的原码就是10001011,反码是11110100,补码是11110101。

计算机中负数只能用补码表示:

如8位二进制:

原码:-127到127

反码:-127到127

补码:-128到127

也就是只有补码能表示-128,因为-127的原码为11111111,反码为10000000,所以-128无法用原码或反码表示,-127的补码是10000001,减1变成-128,也即10000000.

注意10000000是-128,而不是-0,

因为0可以用0000000表示,-0原码是10000000,反码是11111111,补码是反码加1为00000000和0一致.

INFINITE在MSDN中有如下解释:

此常数的值是 -1。对于接受 timeout 参数的线程处理方法(如 Thread.Sleep(Int32)Thread.Join(Int32)),该值用于取消超时行为。

也就是它用来取消超时设置的,go to definition 看到的值是0xffffffff(不要理解成49.75天,它就是-1的补码,32个1)。

WaitForSingleObject中msdn有解释,说Any time-out value between 0x7FFFFFFF and 0xFFFFFFFF — that is, values from 0x80000000 through 0xFFFFFFFE — is equivalent to 0x7FFFFFFF,也就是要么是无限等待,要么最大值为0x7FFFFFFF,那要是等待100天呢,解决方法,可以用获取系统时间的方法相结合,每一小时检查一次,

随手贴的代码:

posted on 2010-12-07 15:44  hgy413  阅读(711)  评论(0)    收藏  举报

导航