if (end < start)
    duration = (0xFFFFFFFF - start) + end;
else
    duration = end - start;

解决方案 »

  1.   

    看下面的:

    start=1;
    end=2;end-start=1;当走到越界的部分时
    start=0xffffffff
    end=3;
    end-start=3-(-1)=4;所以不存在你说的越界的问题,除非start和end相差了2^32以上。这样你只能使用int_64来计算了
      

  2.   

    to xxxbird:
        老大,start=timeGetTime()已经越界了,你如何处理?
      

  3.   


    Kevin_qing(Kevin)说得对。这里面要注意一个数据类型的问题。在Kevin给出的算法中,其数据类型是int. 在我给出的算法中,数据类型是DWORD. 
      

  4.   

    to Kevin_qing:
        可是当你超过了49.71 天之后,timeGetTime()的值就一直是-1了?那样两个这样的时间相减的话都是0了?这下我不是玩完了?
      

  5.   

    DWORD和int的加法对计算机来说是一回事。
      

  6.   

    谁的win98可以跑49天不死机、重起?
    再说如果有这种事情,那么也没有办法解决的,因为你根本得不到正确的时间,怎么可能计时。
      

  7.   

    to xxxbird:
        你能够肯定49.71天之后系统就从0开始计算?
      

  8.   

       算了,我也不和你们讨论了。现在我找到了一种解决的办法,就是用_timeb结构!踏是从midnight (00:00:00), January 1, 1970开始计时的。用的是long,单位是s。但其中又一个毫秒成员。所以现在就可以实现我的功能了!
        爽!