Pracując z jakimś kodem, przechodzę przez pętle uruchomieniowe, do których jestem nowy, wewnątrz NSOperation
s.Korzystanie z NSThread sleep in a NSOperation
S s są zajęty pobieranie danych - i gdy są one zajęte, jest kod, aby czekać na zakończenie pobierania, w postaci NSRunLoop
s i wątku wątku.
Kod ten jest w szczególności interesujące dla mnie:
while (aCertainConditionIsTrue && [self isCancelled]==NO) {
if(![[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]){
[NSThread sleepForTimeInterval:1.0];
}
}
Czytałem o pętlach Uruchom i runMode:beforeDate:
będzie czekać na źródła wejściowego lub timeout. Chociaż nie jestem w 100%, to co liczy się jako źródło danych wejściowych.
Przy pierwszym wykonaniu tego zawsze zwraca NO i uderza w sleepForTimeInterval:
. Czy to źle?
W konkretnej klasie narzędziowej trafia ona bardzo często - raz na każdy wątek - co znacząco szkodzi wydajności.
Jakieś lepsze rozwiązania tego problemu lub porady?