zoukankan      html  css  js  c++  java
  • 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天呢,解决方法,可以用获取系统时间的方法相结合,每一小时检查一次,

    随手贴的代码:

  • 相关阅读:
    Codeforces Round 546 (Div. 2)
    Codeforces Round 545 (Div. 2)
    Codeforces Round 544(Div. 3)
    牛客小白月赛12
    Codeforces Round 261(Div. 2)
    Codeforces Round 260(Div. 2)
    Codeforces Round 259(Div. 2)
    Codeforces Round 258(Div. 2)
    Codeforces Round 257 (Div. 2)
    《A First Course in Probability》-chaper5-连续型随机变量-随机变量函数的分布
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693673.html
Copyright © 2011-2022 走看看