नियमित वर्ष timeGetTime()
का उपयोग समय ऐसा करने के लिए कई Windows- आधारित ऑपरेटिंग सिस्टम पर विश्वसनीय है क्योंकि सिस्टम टाइमर के विवरण का स्तर 10-15 मिलीसेकेंड के रूप में उच्च हो सकता है नहीं है , जिसका अर्थ है कि timeGetTime()
केवल 10-15 मिलीसेकंड के लिए सटीक है। [ध्यान दें कि उच्च ग्रॅन्युलरिटी एनटी-आधारित विंडोज एनटी, 2000, और एक्सपी जैसे ऑपरेशन सिस्टम पर होती है। Windows 95 और 98 जाते हैं काफी बेहतर विवरण के स्तर को पाने के लिए 1-5 चारों ओर एमएस।]
हालांकि, अगर आप ( अंत में और timeEndPeriod(1)
) अपने कार्यक्रम की शुरुआत में timeBeginPeriod(1)
फोन, timeGetTime()
आमतौर पर होगा 1-2 मिलीसेकंड, के लिए सटीक बन गया है और आपको सटीक समय की जानकारी अत्यंत प्रदान करेगा।
Sleep()
इसी प्रकार व्यवहार करता है; समय की लंबाई कि Sleep()
वास्तव में के लिए सोता timeGetTime()
की विस्तृत रूप से हाथ में हाथ जाता है, तो बाद timeBeginPeriod(1)
एक बार बुला, Sleep(1)
वास्तव में 1-2 मिलीसेकेंड, 2-3 के लिए Sleep(2)
के लिए सोने जाएगा, और तो पर (वृद्धि में 10-15 एमएस जितना अधिक) में सोने की बजाय)।
उच्च परिशुद्धता समय (उप millisecond सटीकता) के लिए, आप शायद विधानसभा स्मरक RDTSC का उपयोग कर, क्योंकि यह कठिन ठीक करना है से बचने के लिए चाहता हूँ; इसके बजाय, QueryPerformanceFrequency
और QueryPerformanceCounter
, जो 10 माइक्रोसॉन्ड (0.00001 सेकंड) से कम सटीक हैं, का उपयोग करें।
सरल समय के लिए, दोनों timeGetTime और QueryPerformanceCounter, अच्छी तरह से काम और QueryPerformanceCounter स्पष्ट रूप से अधिक सटीक है। हालांकि, अगर आप "समय रुक जाता है" (जैसे फ़्रेमरेट सीमित करने के लिए आवश्यक होते हैं) को किसी भी तरह का क्या करने की जरूरत है, तो आप एक पाश QueryPerformanceCounter बुला में बैठे, यह एक निश्चित तक पहुँचने के लिए के लिए इंतजार की सावधान रहना चाहिए मूल्य; यह आपके प्रोसेसर का 100% खाएगा। इसके बजाय, ((1) पहले! timeBeginPeriod मत भूलना) जब भी आप समय से अधिक 1 एमएस पारित करने के लिए, और उसके बाद की जरूरत है केवल QueryPerformanceCounter दर्ज एक संकर योजना, जहां फोन नींद (1) पर विचार 100% -busy पाश पिछले < 1/देरी की जरूरत के एक दूसरे की 1000 वीं बंद खत्म करने के लिए। यह आप बहुत कम CPU उपयोग के साथ अति सटीक देरी दे देंगे (10 माइक्रोसेकंड करने के लिए सही),। उपरोक्त कोड देखें।
timeBeginPeriod() से बचें; यह सिस्टम-व्यापी शेड्यूलर को प्रभावित करता है और ऊर्जा की बचत के साथ समस्याएं पैदा कर सकता है। – MSalters