C++ 该函数每秒执行一次,可以正常工作,但每0.5秒执行一次

C++ 该函数每秒执行一次,可以正常工作,但每0.5秒执行一次,c++,time,C++,Time,问候 以下代码运行良好…至少一秒钟以上将执行expx函数 在函数Getexp中,我每隔0.01秒调用Getexp 100次, 实际上expx函数只调用一次,这就是我想要的 但是,我的用户需要更改到至少0.5秒以上才能调用expx, 由于以下代码在整数类型的tick1和tick2中工作, 我需要的建议,以改变下面没有太多的代码,并将满足用户的需求 什么功能最适合我的情况?在0.5秒的情况下,时间对我不起作用 double Getexp(double valuex) { double wgt

问候

以下代码运行良好…至少一秒钟以上将执行expx函数 在函数Getexp中,我每隔0.01秒调用Getexp 100次, 实际上expx函数只调用一次,这就是我想要的

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

什么功能最适合我的情况?在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  ;
    }
}
double Getexp(double valuex)
{
双wgt=0.9;
静态双值_t0=0.0;
静态双值_t1=0.0;
双dret=0.0;
静态时间_ttick1=0,tick2=0;
如果(值_t0<0.0001)
{
tick1=时间(空);
tick2=tick1;
值_t0=值x;
值_t1=值x;
dret=expx(值t1,值t0,wgt);
值_t0=dret;
返回值_t0;
}
tick2=时间(空);
如果(勾选2>勾选1)
{
tick1=tick2;
值_t1=值x;
dret=expx(值t1,值t0,wgt);
值_t0=dret;
返回值_t0;
}否则
{
返回值_t0;
}
}
我想你的“时间(空)”没有你想要的精度。如果它说的是10秒精度,你会每秒调用expx 100次

你需要一个高精度的计时器,然后你不应该做timer1=timer2;但timer1=timer2+延迟; 延迟是指您不想呼叫expx的时间


有时计时器以毫秒为单位给出时间,但这并不意味着它们有毫秒精度。例如,如果我没有记错的话,windows计时器最坏的精度是25-50毫秒。

很难评估所询问的内容。但我怀疑你是在抱怨“time()”的精度只有最接近的秒,但你需要亚秒的精度

一些时钟函数用于探索,而不是调用“时间”

(窗口)

(窗口)


换句话说,考虑把你的代码转换成毫秒的处理时间,并使用上面的一个适当的调用来获得那个时间< /P>我已经在GCC中测试了…时间(NULL)将是自1970年1月1日以来的秒,所以如果我想要的是整数,像1秒,2秒或更多,它工作得很好,但是用户请求0.5秒,它无法及时工作,或者我不知道如何更改代码以适应0.5秒的情况…感谢您的友好响应!如果您使用GetTickCount作为示例,并使用我的备注(timer1=timer2+DELAY;)更改代码,其中延迟以毫秒为单位(每0.5秒500次),那么它将完美地工作。