objective-c - iOS-如何在线程(使用GCD)结束工作时收到通知

标签 objective-c multithreading nsthread grand-central-dispatch

我开始使用GCD,我需要知道某个线程何时结束工作。

我的代码:

dispatch_queue_t registerDeviceQueue = dispatch_queue_create("RegisterDevice", NULL);
dispatch_async(registerDeviceQueue, ^{
    [self registerDevice];

    dispatch_async(dispatch_get_main_queue(), ^{
        [aiRegisterDevice stopAnimating];
    });
});
dispatch_release(registerDeviceQueue);

我需要知道此步结束的时间,以便UIActivityView可以停止。
现在的样子,它在线程结束之前就停止了。

谢谢,

RL

最佳答案

我将建立一个组,并使用dispatch_group_wait仅在计算完成后才继续。举个例子:

dispatch_queue_t registerDeviceQueue = dispatch_queue_create("RegisterDevice", NULL);
dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, registerDeviceQueue, ^{
    [self registerDevice];
});

dispatch_group_wait(group, DISPATCH_TIME_FOREVER); // Block until we're ready
// Now we're good to call it:
[aiRegisterDevice stopAnimating];

dispatch_release(registerDeviceQueue);
dispatch_release(group);

或者,如果您想防止回调阻塞,请使用dispatch_group_notify:
dispatch_queue_t registerDeviceQueue = dispatch_queue_create("RegisterDevice", NULL);
dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, registerDeviceQueue, ^{
    [self registerDevice];
}); // In this version, the group won't block


// This block gets called asynchronously when the above code is done:
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    [aiRegisterDevice stopAnimating];
});

dispatch_release(registerDeviceQueue);
dispatch_release(group);

关于objective-c - iOS-如何在线程(使用GCD)结束工作时收到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7077589/

相关文章:

objective-c - 空白的第一个 UITableView 部分标题

iphone - 使用正确的方法 integerForKey、objectForKey for NSUserDefaults 进行迭代,以备份到数据库?

iphone - 如何通过NSOperation实现并发任务?

objective-c - 在 NSArray 中搜索对象属性的快速方法

iOS 在设备丢失/获得连接时收到通知

multithreading - 为什么从另一个线程访问 GUI 元素是错误的?

java - 在这种情况下如何有效地使用线程?

ios - 在惰性变量中使用 dispatch_once 或静态变量

iphone - 如何在不调用选择器的情况下分离线程,或者至少进行变通?

ios - NSThread参数问题