2014-01-23 46 views
0

這是我如何創建一個線程:取消NSThread

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

這也是我如何阻止它:

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

而且這是我在線程EXCUTE:

-(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只是設置一個標誌。你必須檢查國旗。

while (!self.isCancelled) { 
    // MyStuff 
} 
+0

注意OP:「如果它睡覺,它永遠不會被取消,不要只是睡覺它」 –