iOS - 当线程(使用GCD)结束它的工作时如何通知

Rui*_*pes 1 multithreading objective-c 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);
Run Code Online (Sandbox Code Playgroud)

我需要知道这个步骤何时结束,以便UIActivityView可以停止.它现在的方式,它在线程结束前停止.

谢谢,

RL

Chr*_*rth 6

我设置了一个组,并且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);
Run Code Online (Sandbox Code Playgroud)

或者,如果要阻止回调阻止使用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);
Run Code Online (Sandbox Code Playgroud)