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/

相关文章:

iOS7 在导航 Controller 推送 View 设置中按协议(protocol)向后传递数据

ios - 我的 View 只有 320 像素,我在 iPhone 5 上看到分辨率很差的图像?

python - 在 PyGTK 中,如何使用线程?

python - Python 什么时候重置线程计数?

objective-c - 如何结束使用 detachNewThreadSelector 创建的轮询线程?

iOS NSMutableArray 如何检查它是否包含 NSNumber 对象?

objective-c - CocoaPods/Podspec 和 *.framework

c++ - boost指针容器库可以用作线程安全容器集合吗?

objective-c - 使用_cmd在 objective-c 的主线程上执行方法

iphone - 什么叫CoreData不是线程安全的?