如何使背景线程在另一个后台线程完成之前不工作,以及如何使其在第一个后台线程完成后启动它的线程
问问题
2126 次
2 回答
2
使用标志来处理此类事件,如下所示...
BOOL isYourthreadexecuting = NO;
- (void)beginThread {
isYourthreadexecuting = YES;
[self performSelectorInBackground:@selector(backgroundThread) withObject:nil];
}
- (void)backgroundThread {
[myClass performLongTask];
// Done!
isYourthreadexecuting = NO;
}
- (void)waitForThread {
if (! isYourthreadexecuting) {
// Thread completed
[self callyourmethod];
}
}
已编辑>>根据使用注释添加
我建议您使用NSOperationQueue进行多线程处理。
希望,这会让你...
于 2012-05-05T10:48:20.947 回答
2
正如我的评论中所述,您可以使用 GCD 的串行调度队列。这是一个示例代码来演示:
- (IBAction)buttonSerialQ2Pressed:(id)sender
{
dispatch_queue_t serialdQueue;
serialdQueue = dispatch_queue_create("com.mydomain.testbed.serialQ2", NULL);
dispatch_async(serialdQueue, ^{
//your code here
[self method1];
});
dispatch_async(serialdQueue, ^{
//your code here
[self method2];
});
dispatch_async(serialdQueue, ^{
//your code here
[self method2];
});
dispatch_async(serialdQueue, ^{
//your code here
[self method3];
});
}
-(void)method1
{
for (int i=0; i<1000; i++)
{
NSLog(@"method1 i: %i", i);
}
}
-(void)method2
{
for (int i=0; i<10; i++)
{
NSLog(@"method2 i: %i", i);
}
}
-(void)method3
{
for (int i=0; i<100; i++)
{
NSLog(@"method3 i: %i", i);
}
}
于 2012-06-04T13:51:31.173 回答