2016-06-30 16 views
16

कृपया कोई मुझे बताएं कि स्विफ्ट 2.2 में कुछ मिलीसेकंड के लिए नींद() का उपयोग कैसे करें?स्विफ्ट 2.2 में कुछ मिलीसेकंड के लिए कैसे सोएं?

while (true){ 
    print("sleep for 0.002 seconds.") 
    sleep(0.002) // not working 
} 

लेकिन

while (true){ 
    print("sleep for 2 seconds.") 
    sleep(2) // working 
} 

यह काम कर रहा है।

+1

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

+0

नींद() ** ** ** पैरामीटर के रूप में लेता है। तो सो जाओ (0.002) 0 सेकंड सो जाएगा। –

उत्तर

32

usleep() एक दूसरे

usleep(1000000) //will sleep for 1 second 
usleep(2000) //will sleep for .002 seconds 

या

let ms: UInt32 = 1000 
usleep(2 * ms) //will sleep for 2 milliseconds (.002 seconds) 

या

let second: UInt32 = 1000000 
usleep(UInt32(0.002) * second) //will sleep for 2 milliseconds (.002 seconds) 
8

उपयोग func usleep(_: useconds_t) -> Int32 (आयात Darwin या Foundation ...)

+1

के बजाय नींद (नैनोसेकंड्स) का उपयोग करें() सोते हैं() एक सेकंड के लाखों लेते हैं, इसलिए सोएं (1000000) 1 सेकंड – Harris

2

तुम सच में सोने के लिए की जरूरत है, usleep कोशिश के रूप में @ user3441734 के जवाब में सुझाव दिया।

हालांकि, आप यह विचार करना चाहेंगे कि नींद सबसे अच्छा विकल्प है या नहीं: यह एक विराम बटन की तरह है, और ऐप चलने के दौरान जमे हुए और उत्तरदायी होगा।

आप NSTimer का उपयोग करना चाह सकते हैं।

//Declare the timer 
var timer = NSTimer.scheduledTimerWithTimeInterval(0.002, target: self, selector: #selector(MyClass.update), userInfo: nil, repeats: true) 
self, selector: "update", userInfo: nil, repeats: true) 



func update() { 
    // Code here 
} 
+0

के लिए सोएगी कभी-कभी कुछ समय के लिए कुछ पृष्ठभूमि कार्य को रोकना अच्छा विचार है ... और सो जाओ और सो जाओ अपनाने और सस्ती समाधान के लिए बहुत उपयोगी, आसान हो सकता है। दुर्भाग्यवश, नींद या नींद का उचित उपयोग देखने के लिए बहुत ही कम है। आम तौर पर, इससे बचने के लिए बेहतर होता है :-) – user3441734

+0

यदि आप ईवेंट थ्रेड को रोक देते हैं तो यह केवल ऐप को फ्रीज करेगा, जो हमेशा एक भयानक विचार है। यूआई के अलावा अन्य काम वैसे भी उस धागे से किया जाना चाहिए। सामान्य नींद का सामान्य उपयोग केवल मौजूदा थ्रेड को अवरुद्ध करने का कारण बनता है। – absmiths

+0

एह, यदि आप अपने ऐप के उच्च-स्तरीय हिस्से में 'usleep'' कह रहे हैं तो यह सबसे खराब संकेत है। यह एक के लिए जीसीडी कतारों को अवरुद्ध कर सकता है। केवल ऐप्पल प्रदान करता है अगर ऐप्पल _really_ प्रदान करता है जो आपको करने की आवश्यकता के लिए उपयुक्त नहीं है। – sudo

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