2012-02-02 13 views
6

मेरे पास एक कोड है जो चलने पर, यह अनुक्रम में रेखाओं की श्रृंखला निष्पादित करता है। मैं बीच में एक विराम जोड़ना चाहता हूं।थ्रेड के लिए वैकल्पिक। सी # में सो जाओ?

वर्तमान में, मैं इसे इस

//do work 
Thread.Sleep(10800000); 
//do work 

हालांकि यह सॉफ्टवेयर जमा की तरह है, और मुझे लगता है कि क्योंकि सोने का समय बहुत ही बड़ी है यह है। मैंने ऑनलाइन खोज की और मुझे टाइमर नामक एक और काम मिला। क्या कोई मुझे टाइमर के लिए नमूना कोड दिखा सकता है जो थ्रेड.sleep की तरह काम करता है?

अग्रिम धन्यवाद।

संपादित करें: मैं सॉफ्टवेयर की आवश्यकता कोड निष्पादन के बाकी के साथ आगे बढ़ने से पहले 3 घंटे के लिए प्रतीक्षा करने के लिए। यह सॉफ़्टवेयर मशीनों के साथ संवाद करने के लिए है, और मैं 3 घंटे के इंतजार के दौरान शेष कोड निष्पादित नहीं कर सकता।

+2

Thread.Sleep(X); 

जगह ले सकता है तो ... का उपयोग एक छोटा सोने का समय? 10 800 000 मिलीसेकंड तीन घंटे है। टाइमर और सोते विभिन्न उद्देश्यों की सेवा करते हैं, आप वास्तव में किसी दूसरे के साथ प्रतिस्थापित नहीं कर सकते हैं। – millimoose

+2

एर, आपने 10800 सेकंड के सोने के समय के लिए क्यों पूछा? – Qwertie

+2

बस स्पष्ट करने के लिए, क्या आप वास्तव में '10800000' मिलीसेकंड (3 घंटे) के लिए सोना चाहते हैं? – keyboardP

उत्तर

4

यदि आपका नींद मुख्य धागे पर है तो आपका सॉफ़्टवेयर स्थिर हो जाएगा। मन पैरामीटर मिलीसेकेंड में है रखें। 10 800 000 मिलीसेकंड = 10 800 सेकंड

समय पारित करने के लिए एक और तरीका है बजाय एक TimeSpan वस्तु पारित करने के लिए है। उदाहरण के लिए:

// Sleep for 10 seconds 
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10)); 

टाइमर के लिए के रूप में:

आप System.Timers.Timer उपयोग कर सकते हैं;

Timer timer = new Timer(); 
timer.Interval = 20; // milliseconds 
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); 
timer.AutoReset = true; // if not set you will need to call start after every event fired in the elapsed callback 
timer.Start(); 
6

कृपया this MSDN reference on the System.Threading.Timer class देखें। परीक्षण/सीखने के दौरान आपके लिए एक महान स्पष्टीकरण, सभी वर्ग के सदस्यों और कुछ नमूना कोड का पालन करना है।

मन आप, हालांकि, Timer इस्तेमाल किया जाना चाहिए जब आप एक निश्चित अंतराल पर ईवेंट सक्रिय करना चाहते हैं। यदि आप बस अपने आवेदन के निष्पादन को रोकना चाहते हैं, तो आपको Thread.Sleep() के साथ जाना चाहिए। हालांकि, जैसा कि कई अन्य ने इंगित किया है, आप अपने धागे को लंबे समय तक सोने के लिए सो रहे हैं।

2

Thread.Sleep जो आप इस के लिए उपयोग करना चाहते हैं, आप 3 घंटे से अधिक उचित नींद अवधि का उपयोग करना चाह सकते हैं।

अद्यतन:

कुछ टिप्पणियों को पढ़ने के बाद, Thread.Sleep शायद तुम क्या नहीं करना चाहता है। अन्य लोगों ने सुझाव दिया है कि System.Threading.Timer का उपयोग करें।

+0

यदि आवश्यकता ** ** कुछ कोड चलाने से पहले 3 घंटे तक प्रतीक्षा करें, तो 'थ्रेड स्लीप' का उपयोग करना वह नहीं है जिसका उपयोग करना चाहिए। – ken2k

+0

सहमत, मैंने अपडेट किया है। –

+0

यह हमेशा समस्या पर हो सकता है। न ही यह एक रूप में कहता है, एक सेवा या कमांड प्रॉम्प्ट हो सकता है। हालांकि यह ऐसा नहीं लगता है कि वह इसे सही तरीके से कर रहा था, फिर भी x घंटे (डीबी बैकअप, फ़ंक्शन साफ़ करें, आदि) होने के कई कारण हैं। – JeremyK

0

आप 10800 सेकंड, या 3 घंटे के लिए धागे सो रहे हैं। थ्रेड। स्लीप() को आपके थ्रेड को फ्रीज करने के लिए डिज़ाइन किया गया है, उस अवधि के लिए सॉफ़्टवेयर में काम करने से कुछ भी रोकें। इस मामले में, अवधि 18 मिनट है। तुम क्या करने की कोशिश कर रहे हो?

2

आपकी समस्या यह है कि आप अपने आवेदन के मुख्य धागे को अवरुद्ध कर रहे हैं, जो यूई को चलाने के लिए ज़िम्मेदार है। आपको यह नहीं करना चाहिए। इसके बजाय एक टाइमर का उपयोग करें - फार्म एक शायद एक फार्म अनुप्रयोग में सबसे आसान है, या BackgroundWorker पर विचार करें।

1

Thread.Sleep आम तौर पर अपने अनुप्रयोग के मुख्य थ्रेड में नहीं, एक अलग थ्रेड को रोकने के लिए इस्तेमाल किया जाएगा (के लिए इस तरह के एक लंबे समय से एक टाइमर इंतजार शायद अधिक उपयुक्त है)।

टाइमर आम तौर पर समय-समय पर अपने सामान्य कार्यों के बंद करो और एक घटना को संभालने के लिए मुख्य थ्रेड पैदा करने के लिए इस्तेमाल किया जाएगा।

या तो विधि समय-समय पर एक निश्चित समय के अंतराल के बाद एक समारोह में प्रदर्शन करने के लिए इस्तेमाल किया जा सकता।

मुझे क्या करना नहीं होता 3 घंटे के लिए सोने के लिए मुख्य थ्रेड पूछना है।

4

का प्रयोग कर एक टाइमर!

private DispatcherTimer Timer; 
public Constructor 
{ 
    Timer = new System.Windows.Threading.DispatcherTimer(); 
    Timer.Tick += new EventHandler(Timer_Tick); 
    Timer.Interval = new TimeSpan(0,0,10); 
    Timer.Start(); 
} 


private void Timer_Tick(object sender, EventArgs e) 
{ 
    Timer.Stop(); 
    Timer -= Timer_Tick; 
    Timer = null; 
    // DO SOMETHING 
} 
1

मुझे लगता है कि आप एक Monitor उपयोग करना चाहिए। यह आपको ऑब्जेक्ट्स पर इंतजार करने और लॉक को रिलीज़ करने में मदद करता है जब आपको प्रोग्राम चलाने जारी रखने की आवश्यकता होती है।

आप यहाँ अपने जवाब खोजने चाहिए: Safe Thread Synchronization

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