2010-11-29 15 views
12

एंड्रॉइड एनडीके के तहत, क्या एक नींद() फ़ंक्शन है जो एक्स मिलीसेकंड के लिए सोता है, लेकिन ईवेंट लूप को अवरुद्ध न करें?एंड्रॉइड एनडीके के लिए कोई नींद() फ़ंक्शन है?

हम मैक, विंडोज और एंड्रॉइड पर काम करने के लिए एपीआई परीक्षण लिख रहे हैं। अब तक, हमने मैक और विंडोज के लिए कुछ प्रकार की नींद() लागू की है, लेकिन हम एंड्रॉइड एनडीके के लिए नए हैं और वहां कुछ मदद की ज़रूरत है। पहले ही, आपका बहुत धन्यवाद।

उत्तर

10

तो तुम एक sleep() विधि उस समय की एक निश्चित राशि के लिए नींद करता है लेकिन घटना पाश ब्लॉक नहीं करता के लिए देख रहे हैं? यह मेरे लिए अजीब लगता है। मुझे लगता है कि आप इसके बजाय एक नए धागे का उपयोग करना चाहेंगे और नींद() विधि को कॉल कर सकते हैं - बिना किसी जेएनआई का उपयोग किए।

+0

मुझे और स्पष्ट होना चाहिए: मैं सोना चाहता हूं, लेकिन * अन्य * प्रक्रियाओं को अवरुद्ध न करें। मेरी अपनी प्रक्रिया को अवरुद्ध किया जाना चाहिए। –

+2

आप * अन्य प्रक्रियाओं को अवरुद्ध नहीं कर सकते हैं। वे ... अन्य प्रक्रियाएं हैं। वे आपके चलने पर निर्भर नहीं हैं। उस ने कहा, एक घटना लूप में नींद() का उपयोग करना कुछ तोड़ने का एक मजबूत संकेत है। – hackbod

+0

यह दिखाता है कि मैं इस मंच पर कितना हरा हूं। तो, एंड्रॉइड के लिए एक नींद() फ़ंक्शन है? –

0

आप सेट समय के बाद चलाने के लिए रननेबल शेड्यूल करने के लिए [हैंडलर.postDelayed] [1] का उपयोग कर सकते हैं, इस दौरान ईवेंट लूप काम करना जारी रखेगा।

[1]: http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable, लंबे)

+0

+1, आधार है कि एक समय ईवेंट शेड्यूल करते समय शायद असली सवाल का सही जवाब है पर –

+0

यह जावा में लिखा Android एप्लिकेशन के लिए सही तरीका है। लेकिन हैई यह जानना चाहता था कि कार्यक्रम को अवरुद्ध किए बिना सी ++ कार्यक्रम में कैसे सोना है, जो केवल कई धागे का उपयोग करके किया जा सकता है। – mreichelt

2

सामान्य लिनक्स नींद कार्य (नींद, आदि) उन धागे को अवरुद्ध कर देगा जो उन्हें कॉल करते हैं। यह आपके ऊपर है कि कौन सा धागा है - आशा है कि यूआई एक नहीं।

एक और एंड्रॉइड शैली दृष्टिकोण भविष्य में होने वाली घटना को स्थापित करने और फिर वर्तमान घटना से वापस आने के लिए होगा। जब नई घटना आग लगती है तो आप अगला कदम उठाते हैं। एक राज्य मशीन के उदाहरण के लिए सोचें जिसमें प्रत्येक राज्य को एक घटना के रूप में दर्ज किया जा रहा है, कुछ प्रभावी ढंग से तात्कालिक कर रहा है, भविष्य के समय के लिए अगले राज्य को शेड्यूल कर रहा है, और फिर लौट रहा है।

6

एक जवाब में @mreichelt commment ओर मुड़ते:

हाँ वहाँ एक sleep(seconds) कार्य है।

1.add #include <unistd.h>

  1. कॉल: sleep(seconds) या usleep(microseconds)

टिप्पणी: एक माइक्रोसेकंड (हमें या ग्रीक अक्षर म्यू प्लस रों) है दस लाखवाँ (10 -6) एक दूसरे की है, जबकि एक millisecond (एमएस या msec) एक दूसरे

1

हाँ यह unistd.h में परिभाषित किया लेकिन सावधान नींद समारोह होना है एक हजार खिड़कियों नींद पर इतना मानकीकृत नहीं है, जिसमें परिभाषित किया जाता है ` खिड़कियों

sleep(int millisenconds); 

linux`

int sleep(unsigned int seconds); 
int usleep(useconds_t useconds); 

usleep पर पर माइक्रोसेकंड जहां नींद सेकंड लेता है लेता है। 1 सेकंड = 1 * 1000 * 1000

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