2012-01-30 63 views
0

问候!!每秒钟执行的功能,它的工作原理,但每0.5秒钟一次

下面的代码工作正常....至少超过一秒将在函数执行expx功能 Getexp,我叫Getexp每0.01秒100次, 实际上expx功能将只称为只是一个时间,这就是我想要的!

但是,我的用户需要改变至少0.5秒以上调用expx, 因为下面的代码在tick1工作,tick2在整数类型, 我需要建议更改以下没有太多的代码和满足用户需求....

哪种功能最适合我的情况?在0.5秒的时间内,time_t不适用于我!

double Getexp(double valuex) 
{ 
    double wgt=0.9 ; 
    static double value_t0=0.0 ; 
    static double value_t1=0.0 ; 
    double dret = 0.0 ; 
    static time_t tick1=0 ,tick2=0 ; 

    if(value_t0 < 0.0001) 
    { 
     tick1=time(NULL); 
     tick2=tick1 ; 
     value_t0 = valuex ; 
     value_t1 = valuex ; 
     dret = expx(value_t1,value_t0,wgt) ; 
     value_t0 = dret ; 
     return value_t0 ; 
    } 
    tick2=time(NULL); 
    if(tick2 > tick1) 
    { 
     tick1 = tick2 ; 
     value_t1 = valuex ; 
     dret = expx(value_t1,value_t0,wgt) ; 
     value_t0 = dret ; 
     return value_t0 ; 
    }else 
    { 
     return value_t0 ; 
    } 
} 

回答

0

评估所要求的内容相当困难。但我怀疑你是在抱怨“时间()”只是精确到最近的秒数,但你需要亚秒精度。

有些时钟功能可以探索而不是调用“时间”。

GetTickCount(Windows)中

GetSystemTime(Windows)中

gettimeofday

clock_gettime

换句话说,考虑转换你的代码以毫秒为单位来处理时间和使用的一个上面的适当调用以获得当时的时间

0

我想你的'时间(NULL)'没有你想要的精度。如果它说10毫秒的精度,你会呼叫expx每秒100次...

你需要一个高精度的计时器,然后你不应该做timer1 = timer2;但是timer1 = timer2 + DELAY; DELAY是你不想调用expx的时候。

有时计时器会以毫秒为单位给出时间,但这并不意味着它们的精确度毫秒级。例如,如果我记得正确的话,windows定时器在最坏的情况下可以有25-50msec的精度。

+0

我测试过它gcc ... time(NULL)将是1970年1月1日以来的秒数,我参考http://www.cplusplus.com/reference/clibrary/ctime/time/,所以如果我想要的是整数像1秒,2秒或更长时间,它工作正常,但用户请求0.5秒,它不会在time_t工作,或者我不知道如何更改我的代码以适应0.5秒的情况...感谢您的善意回应! – barfatchen 2012-01-30 09:52:12

+0

如果你使用GetTickCount作为例子,并且用我的备注(timer1 = timer2 + DELAY;)来改变你的代码,其中DELAY以毫秒为单位(每0.5秒500次),那么它将完美工作。 – Valmond 2012-01-30 12:24:56