2012-06-30 2 views
2

나는 보통 쓰기 같은 다소 주 '동안'루프를 사용하여 자바 (좀 작은) 게임 : 나는이 프로그램을 만들기 위해이 작업을 수행다른 프로그램에 좋을 수 있도록 Thread.sleep을 사용해야합니까?

while(running) { 
    time = getTime(); 
    if(time - oldTime > 0.01) { 
     tick(time - oldTime); 
     oldTime = getTime(); 
    } 
} 

는 초당 프레임의 최대 수를 가지고,하지만 난 들었어요 그 thread.sleep는 다른 thread를 실행 가능하게합니다. 컴퓨터의 다른 스레드를 허용하기 위해 Thread.sleep (1) (또는 다른 소수의 밀리 초)을 추가해야합니까? 그것은 퍼포먼스보다 좋은 프로그래밍 습관에 관한 질문이며, 실제로 필요하지는 않습니다. 그러나 나는 신뢰할 수 있고 엉성한 프로그램을 만드는 것을 좋아합니다.

+0

글쎄요. 게임이 실행되는 동안 다른 무거운 계산을 할 계획입니까? – Tudor

답변

4

아니요,이 작업을 수행 할 필요가 없습니다.

모든 현대적인 선점 형 멀티 태스킹 시스템은 다른 스레드에 시간을 할당하여 스레드를 실행할 수 있도록합니다. 특정 시간 동안 다른 스레드로 제어권을 강제로 넘겨 주길 원하지 않는 한 이것을 수용하기 위해 sleep()을 사용할 필요가 없습니다.

멀티 코어 시스템에서 모든 코어를 사용하고 오랜 시간 동안 계산 집약적 인 작업을 백그라운드에서 조용하게 완료하려면 원하는대로 설정할 수 있습니다. 다른 작업은 동시에 발생합니다.

+0

또한 Thread.sleep()은 실제로 동일한 VM의 다른 스레드에만 영향을줍니다. 다른 앱이 아닙니다. 다른 응용 프로그램의 경우 OS 스케줄러는 공정성을 보장 할만큼 충분히 좋습니다. – Jochen

4

Timer을 사용하여 그래픽을 업데이트하는 게임을 성공적으로 만들었습니다. 혜택 here을 읽어보십시오. 일반적으로 Robert은 정확하지만 이 필요합니다. 나는 보통 게임 애니메이션 FPS의 용어 인 달콤한 자리를 찾는 것에 주안점을 둔다는 것을 알았지 만, 다른 프로세스에 좋지는 않다.

+0

[* 스윙 응용 프로그램에서 타이머 사용 *] (http://java.sun.com/products/jfc/tsc/articles/timer/)도 참조하십시오. – trashgod

관련 문제