将块添加到非活动调度队列
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;
}
我有一种情况,如果能够将块添加到非活动队列,然后在另一个事件发生后激活该队列,那将很有帮助。但是,如果调度队列为 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;
}