使后台线程等到另一个后台线程在iphone中完成

时间:2012-05-05 10:39:51

标签: iphone ios multithreading background-process

如果第二个后台线程完成后如何使后台线程无法工作,以及在第一个后台线程完成后如何让它启动它的线程

2 个答案:

答案 0 :(得分:2)

使用flag来处理如下所示的此类事件......

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进行多线程处理。

希望,这将是你...

答案 1 :(得分: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);
    }
}