2012-01-30 2 views
0

인사말 !!초당 실행되는 함수, 작동하지만 0.5 초당 같음

다음 코드는 잘 작동 .... 기능에 Getexp을 expx 기능 를 실행합니다 적어도 1 초 이상, 나는, 실제로 expx 기능이 단지 한 번만 호출됩니다 100 번 Getexp마다 0.01 초라고 그게 내가 원하는거야 !!

하지만, 내 사용자는 다음 코드는 정수 타입, tick1에 tick2 작동하기 때문에, 내가 아래에 너무 많이하지 코드를 변경 조언이 필요하고 만족, 을 expx 전화를 적어도 0.5 초 이상으로 변경해야 사용자 필요 ....

내 기능에 가장 적합한 기능은 무엇입니까? 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 ; 
    } 
} 

답변

0

무엇이 요청되는지 평가하는 것이 다소 어렵습니다. 그러나 당신이 "시간()"이 가장 가까운 초에 정확성을 가지고 있다고 불평하고 있다고 의심하지만, 잠깐의 정확도가 필요합니다.

일부 시계 기능은 "시간"을 호출하는 대신 탐색 할 수 있습니다.

GetTickCount (윈도우)

GetSystemTime (윈도우) 즉

gettimeofday

clock_gettime

(밀리 초)의 관점에서 시간을 처리하고 중 하나를 사용하여 코드를 변환 고려 그 시간을 얻으려면 위의 적절한 호출

0

내 생각에 '시간 (NULL)'에 원하는 정밀도가 없습니다. 10msec의 정밀도라고한다면, 초당 100 회 expx를 호출 할 수 있습니다 ...

고정밀 타이머가 필요하고 timer1 = timer2를하지 않아야합니다. 그러나 timer1 = timer2 + DELAY; 여기서 DELAY는 expx를 호출하지 않을 시간입니다.

때때로 타이머는 밀리 초 단위로 시간을 제공하지만 밀리 초 정밀도를 의미하지는 않습니다. 예를 들어, 정확하게 기억한다면 창 타이머는 최악의 경우 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

+0

예를 들어 GetTickCount를 사용하고 DELAY가 밀리 초 (각 0.5 초당 500) 인 내 발언 (timer1 = timer2 + DELAY;)으로 코드를 변경하면 완벽하게 작동합니다. – Valmond