2010-06-21 2 views
8

में देरी का उत्पादन कैसे करें रूबी में देरी का उत्पादन कैसे करें?रूबी

मैंने नींद का बयान दिया लेकिन यह मुझे वह नहीं दिया जो मुझे चाहिए।

puts "amit" 
sleep(10) 
puts "scj" 

मैं इसे पहले अमित प्रिंट करना चाहता हूं, फिर 10 सेकंड की देरी, फिर प्रिंट स्कंज करें।

लेकिन उपरोक्त मामले में क्या होता है यह 10 सेकंड के लिए रुक जाएगा और फिर यह एक साथ अमित और स्कंज प्रिंट करेगा। मुझे वह नहीं चाहिए।

मुझे आशा है कि आपको वह कहना होगा जो मैं कहना चाहता हूं।

+2

आप कहां से अपनी स्क्रिप्ट चला रहे हैं? इसे SciTE या किसी अन्य संपादक के बजाय कमांड लाइन से चलाने का प्रयास करें। – Beanish

+1

अगर मैं 'puts' bla दर्ज करता हूं; नींद (10); '... और जारी रखें!' 'irb में, यह बस काम करता है। कृपया बताएं कि आपका संदर्भ क्या है। प्लेटफॉर्म, रूबी-वर्जन, शायद एक छोटा सा उदाहरण ... – nathanvda

उत्तर

8

कॉल करने से पहले $stdout.flush पर कॉल करें। आउटपुट शायद बफर किया गया है (हालांकि आमतौर पर आउटपुट केवल 0 -लाइन-बफर किया जाता है, जो एक नई लाइन बनाता है, फ्लशिंग के बिना काम करना चाहिए, लेकिन स्पष्ट रूप से यह आपके टर्मिनल के लिए सच नहीं है)।

+0

एनडी प्लज़ मुझे बताएं कि आपने ऊपर दिए गए 'ब्लै' नींद (10) को रखा है और उसके बाद यह जारी है 1 ?? –

6

मैं इसे पुन: उत्पन्न नहीं कर सकता। एक कंसोल से, वास्तव में यह करता है कि तुम क्या उम्मीद थी:

puts "amit" 
sleep 10 
puts "scj" 

(लिनक्स पर रूबी 1.8.6)

आप एक ऐसी ही छोटी लेकिन पूर्ण उदाहरण प्रदान कर सकते हैं जो नहीं करता है कि आप क्या चाहते हैं - या अपने संदर्भ को और अधिक समझाओ?

यदि आप एक वेब एप्लिकेशन लिख रहे हैं, तो ब्राउजर पूरी प्रतिक्रिया लिखने के बाद ही कोई डेटा देख सकता है - जो आपको दिखाई दे रहा है उसे समझाएगा। यदि ऐसा है, तो आपको एक अलग दृष्टिकोण की आवश्यकता होगी जो प्रारंभिक प्रतिक्रिया को पहले लिखा जा सकेगा, और फिर ब्राउज़र को एक और अनुरोध करने की अनुमति देगा। कोई परिदृश्य के आधार पर देरी सर्वर या क्लाइंट पर हो सकती है।

+0

एक्टुलली जोन जो मैं चाहता हूं वह सरल है, मैं इन दो कथनों के बीच देरी करना चाहता हूं लेकिन नींद का उपयोग करना प्रोग्राम निष्पादन क्या हो रहा है नींद के वक्त से ही शुरू होता है कि मैं नहीं चाहता कि मैं निष्पादन का प्रवाह "अमित" से शुरू करना चाहता हूं और फिर मुझे 10 सेकंड देरी और अंतिम कथन चाहिए ... जो मैं चाहता हूं –