group.h相關(guān)方法

group.h
方法介紹
/**
創(chuàng)建組
*/
dispatch_group_t
dispatch_group_create(void);
/**
組內(nèi)部異步線程
@param group 組
@param queue 隊(duì)列
@param block 任務(wù)
*/
void
dispatch_group_async(dispatch_group_t group,
dispatch_queue_t queue,
dispatch_block_t block);
/*
組內(nèi)部異步線程
@param group 組
@param queue 隊(duì)列
@param context 數(shù)據(jù)指針
@param work C函數(shù)方法名
*/
void
dispatch_group_async_f(dispatch_group_t group,
dispatch_queue_t queue,
void *_Nullable context,
dispatch_function_t work);
/*
等待組任務(wù)完成
@param group 指定被等待的組
@param timeout 等待的時(shí)長
*/
long
dispatch_group_wait(dispatch_group_t group, dispatch_time_t timeout);
/*
組隊(duì)列中任務(wù)完成通知
@param group 監(jiān)聽的組
@param queue 監(jiān)聽的隊(duì)列
@param block 任務(wù)完成回調(diào)
*/
void
dispatch_group_notify(dispatch_group_t group,
dispatch_queue_t queue,
dispatch_block_t block);
/*
組隊(duì)列中任務(wù)完成通知
@param group 監(jiān)聽的組
@param queue 監(jiān)聽的隊(duì)列
@param context 任務(wù)數(shù)據(jù)指針
@param work C函數(shù)方法名
*/
void
dispatch_group_notify_f(dispatch_group_t group,
dispatch_queue_t queue,
void *_Nullable context,
dispatch_function_t work);
/*
加入任務(wù)組
@param group 任務(wù)組
*/
void
dispatch_group_enter(dispatch_group_t group);
/*
離開任務(wù)組
@param group 任務(wù)組
*/
void
dispatch_group_leave(dispatch_group_t group);
舉例說明:
dispatch_queue_t quene = dispatch_queue_create("com.Maker", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(quene, ^{
dispatch_queue_t allTasksQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t allTasksGroup = dispatch_group_create();
dispatch_group_async(allTasksGroup, allTasksQueue, ^{
NSLog(@"任務(wù)_1-----%d",[NSThread isMainThread]);
});
dispatch_group_async(allTasksGroup, allTasksQueue, ^{
NSLog(@"任務(wù)_2-----%d",[NSThread isMainThread]);
});
dispatch_group_async(allTasksGroup, allTasksQueue, ^{
NSLog(@"任務(wù)_3-----%d",[NSThread isMainThread]);
});
NSLog(@"--------------------");
dispatch_time_t time = dispatch_time(DISPATCH_TIME_FOREVER, 10 * NSEC_PER_SEC);
if (dispatch_group_wait(allTasksGroup, time) == 0) {
NSLog(@"任務(wù)已經(jīng)全部執(zhí)行完畢-----%d",[NSThread isMainThread]);
}
else {
NSLog(@"任務(wù)沒有執(zhí)行完畢-----%d",[NSThread isMainThread]);
}
/*
dispatch_group_notify(allTasksGroup, allTasksQueue, ^{
NSLog(@"任務(wù)已經(jīng)全部執(zhí)行完畢-----%d",[NSThread isMainThread]);
});
*/
});