每秒执行的功能,它可以工作,但喜欢每0.5秒

时间:2012-01-30 09:04:37

标签: c++ time

问候!!

以下代码工作正常....至少超过一秒将执行expx函数 在功能Getexp中,我每隔0.01秒称Getexp为100次, 实际上expx函数只会被调用一次,这就是我想要的!!

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

哪种功能最适合我的情况? time_t在0.5秒的情况下不会为我工作!

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  ;
    }
}

2 个答案:

答案 0 :(得分:0)

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

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

有时计时器以毫秒为单位给出时间,但这并不意味着它们具有毫秒级的精度。例如,如果我没记错的话,Windows计时器在最差的情况下可以具有25-50毫秒的精度。

答案 1 :(得分:0)

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

要探索一些时钟功能,而不是调用“时间”。

GetTickCount(Windows)

GetSystemTime(Windows)

gettimeofday

clock_gettime

换句话说,考虑将代码转换为以毫秒为单位的处理时间,并使用上述适当的调用之一来获得该时间