将块添加到非活动调度队列

Adding Blocks to Inactive Dispatch Queue

我有一种情况,如果能够将块添加到非活动队列,然后在另一个事件发生后激活该队列,那将很有帮助。但是,如果调度队列为 suspended/inactive,我调用 dispatch_sync 的整个线程将被锁定。

这样的事情可能吗?如果没有,我还有什么其他选择?

一个例子(不是我的实际用例):

#include <stdio.h>
#import <dispatch/dispatch.h>

int main(int argc, const char * argv[]) {
    dispatch_queue_t my_queue = dispatch_queue_create("my_queue", DISPATCH_QUEUE_SERIAL_INACTIVE);

    void (^b)(int) = ^void(int c) {
        printf("%i\n", c);
    };

    for(int i = 1; i <= 1000; i++) {
        dispatch_sync(my_queue, ^{ b(i); });
    }

    dispatch_activate(my_queue);
    return 0;
}

我明白了。使用 dispatch_async 解决了问题。

工作解决方案:

#include <stdio.h>
#import <dispatch/dispatch.h>

int main(int argc, const char * argv[]) {
    dispatch_queue_t my_queue = dispatch_queue_create("my_queue", DISPATCH_QUEUE_SERIAL_INACTIVE);

    void (^b)(int) = ^void(int c) {
        printf("%i\n", c);
    };

    for(int i = 1; i <= 1000; i++) {
        dispatch_async(my_queue, ^{ b(i); });
    }

    dispatch_activate(my_queue);
    return 0;
}