2011-06-03 5 views
5

जारी रखें मैं एक लूप चला रहा हूं, जिसमें मैं "get.chomp" कमांड का उपयोग कर उपयोगकर्ता प्रतिक्रिया की प्रतीक्षा करता हूं। मैं इसे नींद/टाइमर कमांड के साथ कैसे जोड़ सकता हूं?रुबी में, मैं नींद को कैसे जोड़ूं? मैं 1 मिनट के लिए उपयोगकर्ता प्रतिक्रिया का इंतजार करना चाहता हूं, अन्यथा

उदाहरण के लिए

। मैं चाहता हूं कि उपयोगकर्ता एक शब्द दर्ज करने के लिए 1 मिनट का इंतजार करे, अन्यथा यह लूप पर वापस जारी रहेगा।

+0

समय समाप्त मेरे लिए काम किया है। की आवश्यकता होती है 'Win32API' @@ kbhit = Win32API.new ("MSVCRT", "_kbhit", [], 'मैं') मैं 0 में के लिए: हालांकि, मैं भी इस दूसरी तरह के इस कार्य को पूरा करने के लिए मिला ..60 जब तक @@ kbhit.call.zero? एक = हो जाता है() तोड़ अंत नींद 1 अंत अगर मैं == 60 डालता है "..." अंत – RSD

+1

तो फिर तुम एक स्वीकृत जवाब के रूप में कुछ क्यों चिह्नित किया? – ryeguy

+0

क्योंकि यह एक सुरुचिपूर्ण समाधान था जिसकी मैंने कोशिश की और – RSD

उत्तर

1

मुझे लगता है कि इसके बाद के संस्करण समय समाप्त विधि शायद इस समस्या के हल के लिए सबसे खूबसूरत तरीका है। अधिकांश भाषाओं में उपलब्ध एक और समाधान select का उपयोग कर रहा है। आप मॉनिटर करने के लिए फ़ाइल डिस्क्रिप्टर की एक सूची पास करते हैं और एक वैकल्पिक टाइमआउट। कोड बहुत कम संक्षिप्त है:

ready_fds = select [ $stdin ], [], [], 10 
puts ready_fds.first.first.gets unless ready_fds.nil? 
5

आपको रूबी के Timeout पर देखना चाहिए।

डॉक्स से:

require 'timeout' 
status = Timeout::timeout(5) { 
    # Something that should be interrupted if it takes too much time... 
} 
+0

काम करता है मैं काम करने के लिए टाइमआउट प्राप्त करने में सक्षम नहीं था। मेरे लूप में एक सिस्टम कॉल शामिल है, और मैं पढ़ रहा था कि टाइमआउट मॉड्यूल में कभी-कभी समस्याएं होती हैं। – RSD

+0

ठीक है, मैं नेट :: HTTP और ओपन :: यूआरआई कॉल को लपेटने के लिए टाइमआउट का उपयोग करता हूं, जो दोनों सिस्टम कॉल करते हैं, और वे काम करते हैं। –

0

कैसे के बारे में:

def gets_or_timeout(to) 
# Use thread and time limit to wait for a key or refresh after time if no key is hit. 
t=Thread.new{ print "\n> "; gets} 
t.join(to) #wait for end or number of seconds 
t.kill 
end 

... 
gets_or_timeout(60) 
... 
संबंधित मुद्दे

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