2014-01-23 3 views
0

Это, как я создать тему:Отменить NSThread

readFromWebThread = [[NSThread alloc] initWithTarget:self selector:@selector(loadThread:) object:urlStr]; 

И это, как я остановить его:

if ([readFromWebThread isExecuting]) { 
    [readFromWebThread cancel]; 
} 

И это то, что я преобразования приложений в теме:

-(void)loadThread:(NSString*)urlStr { 
    while (YES) { 
     //MyStuff 

     [NSThread sleepForTimeInterval:kSleepBetweenLoading]; 
    } 
} 

И проблема в том, что даже вызвать метод отмены потока, который продолжает поддерживать поток. Любая идея, что может быть ошибкой?

ответ

1

из документации:

-cancel: «Изменение отмененного состояния приемника, чтобы указать, что он должен выйти.»

==> вам необходимо реализовать отмену потока! и если он спит, он никогда не отменяется.

например.

while(YES) { 
    //do a piece of work 
    if([NSThread currentThread].state == canceled) 
     break; 
} 
+0

код ошибки добавлен –

2

-cancel просто устанавливает флаг. Вы должны проверить флаг.

+0

Примечание к OP: «если он спит, он никогда не отменяется, а не просто спать» –