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