当计算机开机时间很长时,比如30天以后,gettickcount()的返回值为负数,可能是超过了长整数范围了,怎么办?

解决方案 »

  1.   

    http://www.china-askpro.com/msg49/qa70.shtml
      

  2.   

    操作系统:win2000 
        编程工具:VB6 
        问题:我做一个24小时运行的软件,需要精确到1ms的计时,我用timeGetTime函数,但是timegettime定义为无符号long,vb中long为有符号整数,这样程序在运行到24天多时候,就会出现溢出错误!也就是timegettime的结果大于2,147,483,647时溢出。我定义timegettime函数为double或者single,程序报出“表达式太复杂”错误!定义timegettime为Currency,在不同的计算机上运行的结果不同,有的延时1ms变成10000ms,我苦!恳请诸位专家给一个解决方法! 
        水平: 中级(王辉)  
        
         陈波的意见: 
        定义一个全局变量整数i作为高位计数器,每个i表示一定的时间如:1,000,000,000作 
        为进制单位 
        (实现:当timegettime取数大于等于1,000,000,000时,i=i+1,用余数作为 
        timegettime的新的计时起点) 
        下面,再通过用i作为数据的高位进行运算即可。 
         
        YoungCat的意见: 
        在定义变量时,不要说明其类型。在第一次使用变量前,把它转换成 dec 类型。例如: 
        dim aaaa '定义 
        aaaa=cdec(aaaa) '转换类型 
        aaaa=45*4185+142/441+48756/544*sin(20) '使用变量  
      

  3.   

    可是api函数gettickcount()返回值为 long ,不能修改吧
      

  4.   

    只要你要算的时间差没有超过49.7天,那么直接用(unsigned)当无符号数减就好了
    因为C里面整数溢出了,运算还是可以继续的如果时间差要超过的,那么请你每天算一次(每天定时作一次也对性能影响不大吧)