【发布时间】:2009-07-20 03:49:04
【问题描述】:
下面是我的辅助 NSThread* processThread 的运行循环
关闭我调用的线程
//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 *processCondition
- 在
YES和NO之间切换processGo
允许我在不取消线程的情况下停止并启动内部 while 循环。
if (processGo == YES)
执行进入内部while循环。
当主线程设置时
processGo = NO
执行离开内部的while循环并整理
在外循环的下一轮,执行命中
[processCondition wait]
等待
如果主线程重置
processGo == YES
并调用
[processCondition wait]
执行重新进入内循环
【问题讨论】:
标签: iphone objective-c multithreading