एक कार्यक्रम में तंग लूपिंग खराब है?क्या कसकर लूपिंग खराब है?
मेरे पास एक ऐसा एप्लिकेशन है जिसमें गेम-भौतिकी सिम्युलेटर के लिए दो धागे हैं। एक अद्यतनगाम धागा और एक रेंडर धागा। रेंडर थ्रेड को कुछ मिलीसेकंड (फ्रेम फ्रेम को प्राप्त करने के लिए) के लिए थ्रेड सोने के कारण थ्रॉटल किया जाता है और अपडेटगैम थ्रेड (जो कुछ भौतिकी समीकरणों के आधार पर गेम ऑब्जेक्ट्स पोजीशन में अपडेट करता है) पहले 10 मिलीसेकंद नींद से थका हुआ था ।
हालांकि, मैंने हाल ही में अपडेटगैम थ्रेड को अनदेखा कर दिया है और मेरे ऑब्जेक्ट्स आंदोलन का सिमुलेशन अब और अधिक यथार्थवादी प्रतीत होता है कि मैंने 10ms नींद ली है। क्या यह गर्म लूप के लिए बुरा है या एक तंग लूप है?
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;
}
}
}
इस उदाहरण मैं सिर्फ 1ms के लिए सो रहा हूँ (और मेरी समझ से कैसे मिलीसेकंड सटीकता और नींद समारोह काम करता है यह शायद अधिक 5-10ms की तरह है के साथ। अगर मैं इस से किसी भी अधिक के लिए सोने के प्रारंभ होने पर मेरी टक्कर पता लगाने और भौतिकी मॉडल की सटीकता पर प्रभाव डालता है करने के लिए।
यह एक बुरा व्यवहार तंग छोरों या उन में 1ms सोता साथ लूप के लिए है? वहाँ कुछ और मैं इसके बजाय क्या करना चाहिए है?
आप का उपयोग करना चाहिए '' 'Thread.currentThread()। नींद के बजाय Thread.Sleep (...) (पर कैसे और क्यों आप धागे का उपयोग कर रहे और लॉकिंग आदि देखने के लिए है। ..) 'क्योंकि यह एक स्थिर विधि है; आपका कोड आपको 'someOtherThread.sleep (...)' करने के लिए प्रेरित कर सकता है जो 'कुछ अन्य थ्रेड' नहीं सोता है। – newacct