我正在尝试做一些基本的事情来理解带有计数器的线程,当按下按钮时,该计数器只会递增,每次按下按钮时,都会启动一个递增同一计数器的新线程。然后我有一个停止按钮来停止正在运行的线程。如何判断有多少线程或哪个线程正在运行?这是我正在处理的基本模板。感谢。
-(int)count {
return count;
}
-(void)setCount:(int) value {
count = value;
}
-(void)updateDisplay {
countLabel = [NSString stringWithFormat:@"%i", count];
count++;
}
-(void)myThread {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self performSelectorOnMainThread:@selector(updateDisplay)
withObject:nil
waitUntilDone:NO];
[pool release];
}
-(void)startThread {
[self performSelectorInBackground:@selector(myThread) withObject:nil];
}
-(void)myThreadStop {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self performSelectorOnMainThread:@selector(updateDisplay)
withObject:nil
waitUntilDone:NO];
[pool release];
}
-(void)stopThread {
[self performSelectorInBackground@selector(myThreadStop) withObject:nil];
}
答案 0 :(得分:0)
基本上,您希望跟踪已运行的线程数,并为每个线程分配唯一的ID。假设startThread
是按钮的事件处理程序,您可能会遇到类似:
static int threadIndex = 0;
static int threadsRunning = 0;
-(void)startThread {
NSNumber* threadId = [NSNumber numberWithInt:threadIndex++];
threadsRunning++;
[self performSelectorInBackground:@selector(myThread) withObject:threadId];
}
然后当你停止一个线程时,你只需递减threadsRunning
。
但是,看看你的代码,我对你的stopTread
方法感到困惑,因为它似乎与myThread
方法完全相同,即根本不停止线程
答案 1 :(得分:0)
您正在后台执行某些操作,这与显式创建线程不同(例如,它可能会重用线程池中的线程)。
如果您想要效率非常低的线程代码,可以使用以下内容:
NSThread * thread = [[[NSThread alloc] initWithTarget:self selector:@selector(myThread) object:nil] autorelease];
[thread start];
while ([thread isExecuting])
{
NSLog(@"Still running");
[NSThread sleepForTimeInterval:0.1];
}
编辑:如果您真的要进行iPhone开发,我建议您改为使用NSOperation / NSInvocationOperation / NSBlockOperation。正确的做法是线程管理。