उद्देश्य-सी / कोको में जावा के थ्रेड। स्लीप () के बराबर क्या है?


112

जावा में आप वर्तमान थ्रेड के निष्पादन को समय के उपयोग के लिए निलंबित कर सकते हैं Thread.sleep()। क्या ऑब्जेक्टिव-सी में ऐसा कुछ है?

जवाबों:


160

हां, वहां + [NSThread sleepForTimeInterval:] है

(बस इसलिए कि आप भविष्य के प्रश्नों के लिए जानते हैं, ऑब्जेक्टिव-सी भाषा ही है; वस्तुओं की लाइब्रेरी (उनमें से कम से कम एक समोआ है।)


6
Thnx! भविष्य के संदर्भ के लिए! परिभाषा वास्तव में + [NSThread sleepForTimeInterval:] है (इसलिए, [NSThread sleepForTimeInterval: 0.1]) की तरह उपयोग किया जाता है।
टिंकरटेक

यह पूर्ण है। धन्यवाद! मैंने अभी-अभी अपने एनीमेशन ब्लॉक समाप्त किए हैं और यह एक आकर्षण की तरह काम करता है।
रिले

मुख्य थेरैड पर सोने के बारे में क्या?
jerinho.com

1
यह ऐसा ही है; मुख्य धागा सिर्फ एक धागा है। मुख्य धागे पर सोना आमतौर पर एक बुरा विचार है, क्योंकि यह आपके कार्यक्रम को गैर-उत्तरदायी बनाता है।
सुलगना

4
सोच रहे लोगों के लिए, [NSThread sleepForTimeInteval:] वही है [[NSThread currentThread] sleepForTimeInterval:]।
pnizzle

94

जावा में एक सेकंड के लिए सोना :

Thread.sleep(1000);

उद्देश्य सी में एक सेकंड के लिए सो रहा है:

[NSThread sleepForTimeInterval:1.0f];

40

तुम क्यों सो रहे हो? जब आप सोते हैं, तो आप UI और किसी भी पृष्ठभूमि URL को अन्य थ्रेड्स में लोड नहीं कर रहे हैं (NSURL अतुल्यकालिक विधियों का उपयोग करके अभी भी चालू थ्रेड पर काम करता है)।

संभावना है कि आप वास्तव में क्या चाहते हैं, प्रदर्शनकर्ता है: withObject: AfterDelay। यह NSObject पर एक विधि है जिसे आप बाद में कुछ पूर्व निर्धारित अंतराल पर एक विधि को कॉल करने के लिए उपयोग कर सकते हैं - यह एक कॉल को शेड्यूल करता है जो बाद के समय में किया जाएगा, लेकिन सभी सामान थ्रेड हैंडल (जैसे UI और डेटा लोड) अभी भी जारी है।


43
परीक्षण प्रयोजनों के लिए मेरे लिए नींद उपयोगी है। मैं यह सुनिश्चित करने के लिए कुछ नेटवर्क देरी का अनुकरण कर सकता हूं कि मेरा ऐप ठीक से प्रतिक्रिया देता है। वर्तमान में मैं एक स्थानीय वेब सर्वर के खिलाफ परीक्षण कर रहा हूं, इसलिए सब कुछ अनिवार्य रूप से तात्कालिक है।
ब्रांटनब

6
नींद नेटवर्क देरी का परीक्षण करने का गलत तरीका है। इस प्रश्न के उत्तर को देखें stackoverflow.com/questions/1502060/… सिम्युलेटर में नेटवर्क की चर गति का परीक्षण कैसे करें यह देखने के लिए। क्योंकि मुख्य धागा सो रहा है सब कुछ ब्लॉक, आप एक नेटवर्क देरी का अनुकरण नहीं कर रहे हैं, लेकिन एप्लिकेशन के निलंबन के अधिक।
केंडल हेल्मसटेटर गेलनर

स्लीपिंग एक जेएवीए थ्रेड पर सम्मिलित ऑपरेशन पर क्या किया जाता है, यह अनुकरण करने के लिए उपयोगी है। आप 10 मिली के लिए सोते हैं, जांचें कि यदि धागा मर गया है तो आप इसे निपटा सकते हैं।
माइक एस

1
यदि आप किसी भी समय सोते हैं तो आपका धागा ठीक उसी अवस्था में होगा जैसा आप सोने से पहले थे। यह एक अच्छा परीक्षण नहीं है क्योंकि वास्तविक दुनिया में आपका आवेदन प्रसंस्करण होगा, नींद नहीं। इसलिए यह पता लगाना महत्वपूर्ण है कि नींद पर भरोसा किए बिना कैसे परीक्षण किया जाए।
केंडल हेल्मसटेटर गेलनर

एक वैकल्पिक समाधान को इंगित करने के लिए +1 धन्यवाद! बस मैं क्या देख रहा था :)
jpswain

7

बेशक, आप भी मानक यूनिक्स नींद () और usleep () कॉल का उपयोग कर सकते हैं। (यदि कोको लिख रहा हूं, तो मैं [NSThread sleepForTimeInterval:], के साथ रहूंगा।)


5

यदि आप सोने के लिए NSThread sleepForTimeInterval (कमेंटेड कोड) का उपयोग करते हैं, तो डेटा लाने में रुकावट आएगी, लेकिन + [NSThread sleepForTimeInterval:] (checkLoad पद्धति) डेटा को ब्लॉक नहीं करेगी।

नीचे के रूप में मेरा उदाहरण कोड:

- (void)viewDidAppear:(BOOL)animated
{
//....
//show loader view
[HUD showUIBlockingIndicatorWithText:@"Fetching JSON data"];
//    while (_loans == nil || _loans.count == 0)
//    {
//        [NSThread sleepForTimeInterval:1.0f];
//        [self reloadLoansFormApi];
//        NSLog(@"sleep ");
//    }
[self performSelector:@selector(checkLoad) withObject:self afterDelay:1.0f];
}

-(void) checkLoad
{
    [self reloadLoansFormApi];
    if (_loans == nil || _loans.count == 0)
    {
        [self performSelector:@selector(checkLoad) withObject:self afterDelay:1.0f];
    } else
    {
        NSLog(@"size %d", _loans.count);
        [self.tableView reloadData];
        //hide the loader view
        [HUD hideUIBlockingIndicator];
    }
}

0

usleep () का उपयोग ive के रूप में भी किया जा सकता है, जो वर्तमान समय में वर्तमान थ्रेड को रोकने के लिए इसका उपयोग किया जाता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.