गेम लूप (C ++) में विंडोज पर स्लीप () फ़ंक्शन का उपयोग करना सुरक्षित है? मैं निश्चित फ्रेम दर चाहता हूं।
गेम लूप (C ++) में विंडोज पर स्लीप () फ़ंक्शन का उपयोग करना सुरक्षित है? मैं निश्चित फ्रेम दर चाहता हूं।
जवाबों:
नहीं यह नहीं। नींद केवल सोने के लिए एक न्यूनतम समय की गारंटी देती है , लेकिन यह वास्तव में उस समय की किसी भी मनमानी राशि के लिए सो सकती है। आपका टाइमर रिज़ॉल्यूशन (टाइम बायबिनपेरियोड के माध्यम से सेट) भी इसके लिए महत्वपूर्ण है, और यहां तक कि अगर आप अपने टाइमर के लिए कुछ और उपयोग कर रहे हैं (जैसे QueryPerformanceCounter), तो भी आपको नींद को नियंत्रित करने के लिए टाइमबिनपिरियोड की आवश्यकता है।
तो संक्षेप में:
नींद का उपयोग करने के लिए केवल उचित मामला होगा यदि आप उदाहरण के लिए सीपीयू के उपयोग को कम करना चाहते हैं। तब भी आप स्लीप (1) का उपयोग कर रहे होंगे; फ्रैमरेट्स को नियंत्रित करने के लिए इसका उपयोग करने का तरीका नहीं है।
Vsync को मजबूर करना एक निश्चित फ्रैमरेट प्राप्त करने का एक सामान्य तरीका है, लेकिन फिर भी, अलग-अलग हार्डवेयर अलग-अलग रिफ्रेश दरों पर चलेंगे और आप अलग-अलग मशीनों में लगातार फिक्स्ड फ्रैमरेट नहीं कर पाएंगे (यह इस बात पर निर्भर करता है कि किस तरह का हार्डवेयर है आप निश्चित रूप से लक्ष्यीकरण कर रहे हैं)।
इस समय इस लेख का उल्लेख करना आवश्यक है: गेमर ऑन गेम्स - फिक्स योर टाइमस्टेप! । यह आपके सिमुलेशन में एक सुसंगत टाइमस्टेप प्राप्त करने के लिए आवश्यक चरणों का वर्णन करता है।
संक्षिप्त उत्तर: नहीं, यह नहीं है।
एक निश्चित फ्रेम दर होने के लिए आपको एक निश्चित कॉलबैक फ़ंक्शन को कॉल करना होगा जो एक विशिष्ट फ्रेम दर को बाध्य करता है। जाहिर है, अगर आप अब एक लूप में एक एकल पुनरावृत्ति में कितना समय नहीं लेंगे, तो आप एक फिक्स स्लीप टाइम सेट नहीं कर सकते हैं।
ग्लूट ग्लूटिमेरफंक () प्रदान करता है , जो कि, यदि आप ओपनजीएल में प्रोग्रामिंग कर रहे हैं, तो आपको सही फ़ंक्शन की आवश्यकता है। पर एक नजर डालें इस उदाहरण के लिए, या यह एक।
Sleep
?