2012-05-05 113 views
0

完成如何使backgroundthread不工作,直到另一個後臺線程被完成,如何使其啓動它的線程一旦第一backgroundthread被完成製作後臺線程等待,直到其他後臺線程獲取iphone

+0

kindle請幫助我,如果你知道答案 – user1184202

+0

我已經寫了一些代碼使用它。對於更多的幫助,你應該在這裏顯示一些代碼,所以我可以理解場景...享受.. – Nit

+0

可能需要使用串行調度隊列。 https://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1 – user523234

回答

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用於多線程。

希望,這將你...

+1

現在我正在遵循以下過程在你的答案中提到,但問題是第二個後臺線程可能會開始任何時刻,它可能從其他類的方法也開始 – user1184202

+0

看到我編輯的答案.. – Nit

+1

@ user1184202如果你有你的答案,它會幫助你,然後標記它正確對其他人有幫助,對你也有幫助 – vishiphone

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); 
    } 
}