2011-03-15 5 views
0

다음을 표현하는 더 깨끗한 방법이 있습니까?마지막 루프 이후 경과 된 ms를 얻는 깨끗한 방법?

// initialize several vars here 

long lastT = 0; 
while (looping) { 
    long now = currentTimeMillis(); 
    long elapsed = now - lastT; 
    lastT = now; 

    // code here 
} 

는 아마도 난 단지 long elapsed=... (아마 루프 자체)가 필요하지만, 다른 라인은 응축거나 다른 곳으로 이동 될 수 있습니다. 그러나 그렇게하는 가장 좋은 방법은 무엇입니까?

위의 내용은 Java로 작성되었지만 사용 된 언어는 중요하지 않습니다.

+0

나는 lastT를 0으로 초기화하지 않을 것입니다.하지만 그 질문에 관한 것이 아니라는 것을 이해합니다. –

+0

@Carl : 예. 상단에 currentTime으로 설정하고 루프 끝에서 경과 검사를 수행하는 것이 더 좋은 방법 인 것 같습니다. –

답변

1

당신은 당신이 한 줄 하나 개 추가 산술 연산의 비용으로 하나 명의 변수 선언을 저장

long lastT = 0; 
while (looping) { 
    long elapsed = currentTimeMillis() - lastT; 
    lastT += elapsed; 

    // actual code goes here 
} 

을 말할 수 있습니다. 시간이 부동 소수점 값인 문맥에서 (예 : Python의 time.timedouble을 반환하는 경우) 이렇게하면 결국 많은 양의 반올림 오류가 발생합니다.

당신이 많은 일을하고있어 귀찮게하는 경우, 이러한 것들을 캡슐화하는 경과 시간 계산 클래스를 만들 수 있습니다. 그러면 루프가 다음과 같을 수 있습니다.

Stopwatch sw = new Stopwatch(); 
while (looping) { 
    long elapsed = sw.timeSinceLastReading(); 
    // actual code goes here 
} 

가치가있는 경우 일반적으로 제공 한 코드와 거의 동일한 구조를 사용합니다.

관련 문제