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

    随手贴的代码:

  • 相关阅读:
    C# 中的委托和事件
    css样式大全(整理版)
    (转)VS2010 快捷键
    委托小例子
    .NET中Cache的使用
    ObjectiveC面向对象编程继承
    ObjectiveC简介
    ObjectiveC面向对象编程实例化对象、构造函数
    MSSql的多表关联的update语句
    ObjectC 与 Java 区别
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693673.html
Copyright © 2020-2023  润新知