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

时间:2018-08-08 00:58:59

标签: objective-c c cocoa grand-central-dispatch

我有一种情况,能够将块添加到非活动队列会很有帮助,然后在另一个事件发生后将其激活。但是,如果调度队列被挂起/处于非活动状态,则我称为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;
}

1 个答案:

答案 0 :(得分: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;
}