4
下面是我的中學NSThread *的runloop processThread何時可以安全釋放NSThread?
要關閉線程我打電話
//cancel secondary thread
[processThread cancel]
//signal condition
[processCondition broadcast];
它是那麼安全,然後調用:
[processCondition release];
[processThread release];
還是我需要確保線程已完成?
也許這樣?
NSTimeInterval timeout = [NSDate timeIntervalSinceReferenceDate] + (1.0/15.0);
while ([processThread isExecuting] && [NSDate timeIntervalSinceReferenceDate] < timeout)
{
[NSThread sleepForTimeInterval: 1.0/1000.0 ];
}
[processCondition release];
[processThread release];
詳細的代碼和說明:
- (void)processLoop
{
NSAutoreleasePool * outerPool = [[NSAutoreleasePool alloc] init];
[processCondition lock];
//outer loop
//this loop runs until my application exits
while (![[NSThread currentThread] isCancelled])
{
NSAutoreleasePool *middlePool = [[NSAutoreleasePool alloc];
if(processGo)
{
//inner loop
//this loop runs typically for a few seconds
while (processGo && ![[NSThread currentThread] isCancelled])
{
NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc]; init];
//within inner loop
//this takes a fraction of a second
[self doSomething];
[innerPool release];
}
[self tidyThingsUp];
}
else
{
[processCondition wait];
}
[middlePool release];
}
[processCondition unlock];
[outerPool release];
}
的組合:
- 內的while循環
- NSCondition * processCo ndition
- 切換和
NO
processGo
之間YES
讓我停止和啓動內循環的同時不取消該線程。
if (processGo == YES)
執行進入內while循環。
當主線程設置
processGo = NO
執行離開所述內的while循環和tidys向上
在外循環的下一次通,執行點擊
[processCondition wait]
並等待
如果主線程重置
processGo == YES
,並呼籲
[processCondition wait]
執行重新進入內環
僅僅因爲你「用它做」不在線程中調用`cancel'並不能保證你可以立即釋放它 – Tim 2009-07-20 05:05:03