2009-04-29 13 views
6

मैं थोड़ी देर के पाश के अंत में नीचेसी # Thread.Sleep जागने तुरंत

Thread.Sleep(5); 

कोड का उपयोग कर रहा हूँ। पुनरावृत्तियों के बीच 5 एमएमएस देरी की कोशिश करने और प्राप्त करने के लिए।

कभी-कभी यह 16ms के लिए सोता है। यह मैं समझता हूं और स्वीकार करता हूं, क्योंकि यह तब होता है जब सीपीयू थ्रेड की सेवा करने के लिए घूमता है। हालांकि, एक बार जब यह अगली पुनरावृत्ति जागृत हो जाए तो नींद की कॉल के तुरंत बाद यह जागने लगता है (मैं टाइमस्टैम्प के साथ लॉग इन कर रहा हूं)। क्या ऐसी छोटी नींद अंतराल का उपयोग करने में कोई समस्या है जिसे इसे शून्य के रूप में माना जाता है?

+0

क्या आप कोड पोस्ट कर सकते हैं जहां आप थ्रेड कॉल कर रहे हैं। नींद()? –

+0

परेशान मत करो। बस टाइमस्टैम्प लॉगिंग कोड पोस्ट करें। ;] – bzlm

+1

5 एमएस लगता है कि यह त्रुटि के मार्जिन के भीतर है, खासकर यदि आप टाइमस्टैम्प का उपयोग कर रहे हैं। स्टॉपवॉच का उपयोग करके इसे दोबारा कोशिश करें और अगर आप अभी भी इस व्यवहार को देख रहे हैं तो हमें बताएं। –

उत्तर

21

आपकी समस्या इस तरह की है कि अधिकांश आधुनिक मशीनों पर DateTime.UtcNow में लगभग 10-15ms का संकल्प है (हालांकि मुझे लगता है कि प्रलेखन कहता है कि यह एनटी 3.5 के बाद से लगभग 10ms है)। यदि आप उच्च रिज़ॉल्यूशन समय चाहते हैं, तो Stopwatch कक्षा देखें, विशेष रूप से Stopwatch.GetTimestamp()

यह भी ध्यान दें कि स्टॉपवॉच केवल उच्च-रिज़ॉल्यूशन टाइमर का उपयोग करेगा यदि वे उपलब्ध हैं (Stopwatch.IsHighResolution आपको रन-टाइम पर बताएंगे)। यदि नहीं, तो यह डेटटाइम पर वापस आ जाता है। UtcNow.Ticks।

4

सबसे अधिक संभावना है कि समस्या यह है कि आपके टाइमर के पास सीमित संकल्प है। यदि यह केवल अपडेट करता है, तो कहें, हर 10 एमएमएस, आप कुछ पुनरावृत्तियों पर एक ही टाइमस्टैम्प देखने जा रहे हैं, भले ही 5ms पास हो जाएं।

आप अपने टाइमस्टैम्प जेनरेट करने के लिए किस टाइमर का उपयोग कर रहे हैं?

0

आप किस प्रकार की प्रणाली पर चल रहे हैं? छोटे अंतराल प्रोसेसर पर निर्भर कर सकते हैं और यह कितना उच्च संकल्प का समर्थन करता है। मैंने एक बार एक हाथ में एक ऐप चलाया जहां टाइमर का संकल्प 16 एमएमएस था। तो यह हार्डवेयर से संबंधित हो सकता है। 30ms कहने के लिए समय अवधि बढ़ाने का प्रयास करें और देखें कि यह तब काम करता है या नहीं।

1

अगर मुझे सही ढंग से एनटी टाइम स्लाइसिंग याद है, जिसे एनटी कर्नेल में पेश किया गया था और अभी भी XP के समान ही सक्रिय था, तो 5ms अंक के आसपास सही काम करता है। हम एक रीयलटाइम एप्लिकेशन बना रहे थे और उस समस्या में भाग गए। आप 5ms सोने का समय लगातार प्राप्त नहीं कर पाएंगे। हमने जो पाया वह था कि आपको कभी-कभी 10 - 16 एमएस मिलेंगे, कभी-कभी कोई एमएस नहीं होता है और कभी-कभी अभी तक शायद ही कभी 5 एमएस मिलता है।

मैं 5 साल पहले इन परीक्षणों को कर रहा था हालांकि तब से चीजें बदल सकती हैं।

संबंधित मुद्दे