下面是一個示例函數,我嘗試運行一個主組,等待,然後在單獨的線程上運行兩個其他後臺任務,然後等待,然後返回在下面顯示的常規塊中更改的值。以下顯示的是我如何做到這一點的猜測。如果我在一個塊中全部運行這些塊,它就可以工作。當我分開塊時它失敗。有沒有人有他們如何完成類似的事情的例子?在此先感謝您的幫助。Grand Central Dispatch。如何運行一個異步組,等待,然後運行另一個,再等待,然後完成?
-(NSString *)sampleFunction:(NSString*)inputString
{
__block NSString *returnString;
dispatch_group_t mainGroup = dispatch_group_create();
dispatch_group_t otherGroup = dispatch_group_create();
void (^firstBlock)(void) = ^(void)
{
...
};
void (^secondBlock)(void) = ^(void)
{
...
};
void (^thirdBlock)(void) = ^(void)
{
...
};
dispatch_group_async(oneGroup, dispatch_get_global_queue(0, 0), firstBlock);
dispatch_group_wait(oneGroup, sizeof(int));
dispatch_group_async(otherGroup, dispatch_get_global_queue(0, 0), secondBlock);
dispatch_group_async(otherGroup, dispatch_get_global_queue(0, 0), thirdBlock);
dispatch_group_wait(otherGroup, sizeof(int));
dispatch_release(userGroup);
dispatch_release(otherGroup);
return returnString;
}
請解釋一下大圖,你想完成什麼?我沒有得到等待的部分。 – DarkDust
爲什麼你將'sizeof(int)'作爲參數傳遞給'dispatch_group_wait'?你知道'DISPATCH_TIME_FOREVER'? – DarkDust
爲什麼不直接執行一個線程上的所有代碼?如果你正在等待線程完成,那麼即使有線程有什麼意義? –