- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的代码看起来像这样:
[SVProgressHUD show];
[imageGenerator generateCGImagesAsynchronouslyForTimes:times
completionHandler:^(CMTime requestedTime, ...) {
dispatch_group_async(queueGroup, queue, ^{
// Do stuff
});
}];
dispatch_group_wait(queueGroup, DISPATCH_TIME_FOREVER);
[SVProgressHUD dismiss];
基本上,显示加载动画 HUD 并开始从 Assets 生成图像缩略图,然后在完成后隐藏 HUD。我正在使用调度组,因为我想确保在隐藏 HUD 之前生成所有缩略图。
但是当我运行它时,HUD 会立即消失。我猜这是因为 generateCGImagesAsynchronouslyForTimes: completionHandler:
--dispatch_group_wait
的异步性质在 completionHandler 中的第一个 dispatch_group_async
之前被调用.
解决这种情况的优雅方法是什么?谢谢。
最佳答案
将此方法视为线程可用的静态计数器,因此当您进入一个组时,计数器递增,而当该 block 返回时,递减...
当那个计数器为0时,它会调用一个 block 来调用
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
while(someCondition)
{
dispatch_group_enter(group);
[SomeClassThatLoadsOffTheInternet getMyImages:^{
// do something with these.
dispatch_group_leave(group);
});
}
dispatch_group_notify(group, queue, ^{
// do something when all images have loaded
});
这是你的想法吗?
关于ios - 如何在异步 block 内为 dispatch_group_async dispatch_group_wait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20133770/
我正在尝试使用调度队列异步填充数组在 iPhone 5 的两个内核上。我正在测试以下代码: float res[20000]; // an array to fill dispatch_queue_t
我一起发出了三个 async 请求,所有这些请求都需要等待,然后才能继续。 我已阅读以下内容以同步异步请求 Waiting until two async blocks are executed be
两个并发的后台任务需要修补两个单独的数组,需要合并到一个dispatch_group_notify block 中。问题是,第一个 block 超出了,但是dispatch_group_notify超
我只是在晚上花了一些时间来研究 GCD,尤其是 dispatch_semaphore_t,因为我从未使用过它。从来不需要。 所以我写了下面的作为测试: - (void)viewDidLoad {
我的代码看起来像这样: [SVProgressHUD show]; [imageGenerator generateCGImagesAsynchronouslyForTimes:times
我的问题是如何在 Swift 3 中正确翻译此函数,因为我注意到有很多关于 dispatch_async 的文档,但没有任何关于 dispatch_group_async 的文档> dispatch_
我是一名优秀的程序员,十分优秀!