Функция выполняется за секунду, работает, но вроде за 0.5 сек - PullRequest
0 голосов
/ 30 января 2012

Приветствие !!

Следующий код работает нормально .... по крайней мере более одной секунды будет выполнять функцию expx в функции Getexp, я вызывал Getexp каждые 0,01 секунды 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 голосов
/ 30 января 2012

Довольно сложно оценить, о чем идет речь. Но я подозреваю, что вы жалуетесь, что «time ()» имеет точность с точностью до секунды, но вам нужна точность менее секунды.

Некоторые функции часов для исследования вместо вызова «времени».

GetTickCount (Windows)

GetSystemTime (Windows)

gettimeofday

clock_gettime

Другими словами, рассмотрите возможность преобразования вашего кода во время обработки в миллисекундах и используйте один из соответствующих вызовов выше, чтобы получить это время

0 голосов
/ 30 января 2012

Полагаю, ваше «время (NULL)» не имеет той точности, которую вы хотите. Если бы он имел точность 10 мс, вы бы вызывали expx 100 раз в секунду ...

Вам нужен высокоточный таймер, и тогда вы не должны делать timer1 = timer2; но timer1 = timer2 + DELAY; Где DELAY - это время, когда вы не хотите вызывать expx.

Иногда таймеры показывают время в миллисекундах, но это не значит, что они имеют точность в миллисекундах. Например, если я правильно помню, таймер Windows может в худшем случае иметь точность 25-50 мсек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...