Vòng lặp chặt chẽ trong chương trình có tệ không?Vòng lặp có bị hỏng không?
Tôi có một ứng dụng có hai luồng cho trình mô phỏng trò chơi-vật lý. Chủ đề updateGame và chuỗi hiển thị. Chuỗi hiển thị được điều chỉnh bằng cách khiến cho luồng ngủ mất vài mili giây (để đạt được tốc độ khung hình tôi muốn) và chuỗi updateGame (cập nhật vị trí đối tượng trò chơi của tôi dựa trên một số phương trình vật lý) trước đây đã được điều chỉnh bởi giấc ngủ 10 phần nghìn giây .
Tuy nhiên, gần đây tôi đã không cập nhật bản cập nhậtGame chủ đề và mô phỏng chuyển động của đối tượng của tôi có vẻ thực tế hơn đáng kể khi tôi đã lấy ra 10ms ngủ. Là nó xấu đến vòng lặp nóng hoặc có một vòng lặp chặt chẽ?
private class UpdateTask implements Runnable
{
private long previousTime = System.currentTimeMillis();
private long currentTime = previousTime;
private long elapsedTime;
public void run()
{
while(true)
{
currentTime = System.currentTimeMillis();
elapsedTime = (currentTime - previousTime); // elapsed time in seconds
updateGame(elapsedTime/1000f);
try {
Thread.currentThread().sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
previousTime = currentTime;
}
}
}
Trong ví dụ này tôi chỉ ngủ cho 1ms (và từ sự hiểu biết của tôi với cách millisecond tính chính xác và chức năng ngủ các công trình này có lẽ giống như 5-10ms. Nếu tôi ngủ cho bất kỳ hơn này nó bắt đầu có ảnh hưởng đến tính chính xác của phát hiện va chạm của tôi và mô hình vật lý.
có một thực tế xấu để có vòng eo hẹp hoặc vòng với 1ms ngủ trong đó? có cái gì khác tôi nên làm gì để thay thế?
Bạn nên sử dụng 'Thread.sleep (...)' thay vì 'Thread.currentThread() ngủ. (. ..) 'bởi vì nó là một phương pháp tĩnh; mã của bạn có thể cám dỗ bạn làm 'someOtherThread.sleep (...)' mà không ngủ 'someOtherThread'. – newacct