2012-09-12 13 views
7

मुझे यकीन नहीं है कि विंडोज कर्नेल थ्रेड टाइमिंग को कैसे प्रबंधित करता है ....NET थ्रेड है। डीएसटी (या सिस्टम समय) से प्रभावित नींद बदलती है?

मैं डीएसटी और किसी अन्य घटना के बारे में बात कर रहा हूं जो विंडोज बॉक्स पर दिन के समय को प्रभावित करता है।

उदाहरण के लिए, थ्रेड .Sleep शून्य से infinite मिलीसेकंड से थ्रेड को अवरुद्ध कर देगा।

गिरी दिन के समय के लिए इस्तेमाल किया है कि के रूप में ही "घड़ी" का उपयोग करता है, तो जब

(क) किसी मैन्युअल दिन के समय बदल जाता है, या
(ख) कुछ एक को तुल्यकालन समय सर्वर दिन के समय बदल जाता है, या
(ग) डेलाइट सेविंग टाइम शुरू होता है या समाप्त हो जाती है और इस प्रणाली के लिए इन दो डीएसटी घटनाओं के लिए प्रतिक्रिया करने के लिए कॉन्फ़िगर किया गया है,
वगैरह,

सो रहे हैं वें प्रभावित किसी भी तरह से पढ़ता है? यानी, कर्नेल इस तरह की घटनाओं को इस तरह से संभालता है कि प्रोग्रामर को कुछ भी करने की ज़रूरत नहीं है?

एनबी।: गैर-महत्वपूर्ण अनुप्रयोगों के लिए, यह है जो परवाह करता है? स्थिति।

महत्वपूर्ण अनुप्रयोगों के लिए, इस सवाल का जवाब जानने के संभावना कि ऐसे ही एक अपवाद की स्थिति के लिए कार्यक्रम चाहिए की वजह से महत्वपूर्ण है।

धन्यवाद

संपादित करें: मैं एक साधारण परीक्षण जो मैं LINQPad 4 चला चुके हैं के बारे में सोचा।

परीक्षण में थ्रेड डालने में शामिल परीक्षण, लगभग एक ही समय में मैन्युअल टाइमर शुरू करने के साथ ही धागा लगाया गया था, और फिर (ए) एक घंटे आगे समय आगे बढ़ रहा था, फिर दूसरे परीक्षण के लिए, दो घंटे पहले ... दोनों परीक्षणों में, नींद की अवधि प्रभावित नहीं थी।

नीचे पंक्ति: थ्रेड के साथ। सो, दिन के समय को प्रभावित करने वाली घटनाओं के बारे में चिंता करने की आवश्यकता नहीं है।

Int32 secondsToSleep; 
String seconds; 
Boolean inputOkay; 
Console.WriteLine("How many seconds?"); 
seconds = Console.ReadLine(); 
inputOkay = Int32.TryParse(seconds, out secondsToSleep); 
if (inputOkay) 
{ 
    Console.WriteLine("sleeping for {0} second(s)", secondsToSleep); 
    Thread.Sleep(secondsToSleep * 1000); 
    Console.WriteLine("i am awake!"); 
} 
else Console.WriteLine("invalid input: [{0}]", seconds); 

उत्तर

8

नहीं है, Thread.Sleep प्रभावित नहीं है:

यहाँ तुच्छ सी # कोड है। कर्नेल आगे यूटीसी में विशेष रूप से समय रखता है। समय क्षेत्र और डीएसटी बस ऊपर से स्तरित हैं।

+1

इस पर विस्तार करने के लिए, 'थ्रेड। स्लीप' प्रभावित नहीं है क्योंकि आंतरिक रूप से कर्नेल इस प्रकार की नौकरी के लिए टिक गिनती (सिस्टम बूट होने के बाद मिलीसेकंड की संख्या) का उपयोग करता है और टिक को मैन्युअल रूप से समायोजित करने का कोई तरीका नहीं है गिनती। (असल में यह थोड़ा अधिक जटिल है लेकिन बढ़िया विवरण महत्वपूर्ण नहीं है।) –

+0

@ जॉय thnx; हैरी जॉनस्टन ने टिप्पणी की है कि कर्नल टिक गिनती का उपयोग करता है ... तो क्या यूटीसी भी शामिल होगा? – gerryLowry

+0

@ हैरी जॉनस्टन thnx; सिर्फ उत्सुक, यह दस्तावेज कहां है? यह मेरा संदेह था लेकिन मुझे नहीं पता कि यह कहां दस्तावेज है। यह देखते हुए कि [टिक गिनती] (http://msdn.microsoft.com/en-us/library/system.environment.tickcount।एएसपीएक्स) सिस्टम स्टार्ट पर रीसेट किया गया है, तो यह दिन के समय की किसी भी (पुनः) सेटिंग द्वारा लगभग निश्चित रूप से अकेला छोड़ा जाएगा। – gerryLowry

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