2012-01-30 106 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