GCD 및 NSOperationQueueue의 간단한 사용, 취소 및 순차적 실행
#pragma mark TODO: group
- (void)test3 {
dispatch_group_t group = dispatch_group_create ();
dispatch_queue_t pp = dispatch_queue_create ("ssss", DISPATCH_QUEUE_SERIAL);
NSMutableArray *kk = @[].mutableCopy;
__block dispatch_block_t block111;
dispatch_apply (10, pp, ^(size_t index) {
dispatch_block_t block = dispatch_block_create (0, ^{
NSLog (@"index:%d %@", index, [NSThread currentThread]);
[kk removeObject:block];
if (index > 5) {
for (dispatch_block_t tmp in kk) {
dispatch_block_cancel (tmp);
}
}
});
dispatch_async (pp, block);
[kk addObject:block];
dispatch_group_wait (group, DISPATCH_TIME_FOREVER);
});
dispatch_group_notify (group, pp, ^{
NSLog (@" ");
});
}
#pragma mark TODO: NSOperationQueue
- (void)test2 {
NSOperationQueue *oq = [[NSOperationQueue alloc] init];
NSMutableArray *opArryM = @[].mutableCopy;
NSBlockOperation *cureent;
BOOL stop = NO;
for (int i = 0; i < 10; i++) {
__block int x = i;
NSBlockOperation *bo1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog (@" %d", x);
if (x > 5) {
[oq cancelAllOperations];
}
}];
if (cureent) {
[bo1 addDependency:cureent];
cureent = bo1;
} else {
cureent = bo1;
}
[opArryM addObject:bo1];
}
[oq addOperations:opArryM waitUntilFinished:YES];
[oq addBarrierBlock:^{
NSLog (@" ");
}];
self.task = oq;
}
- (void)test {
dispatch_group_t group = dispatch_group_create ();
dispatch_queue_t pp = dispatch_queue_create ("ssss", DISPATCH_QUEUE_SERIAL);
dispatch_group_enter (group);
dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), pp, ^{
NSLog (@" 1");
NSLog (@" 1===%@", [NSThread currentThread]);
dispatch_group_leave (group);
});
dispatch_group_wait (group, DISPATCH_TIME_FOREVER);
dispatch_group_enter (group);
dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), pp, ^{
NSLog (@" 2");
NSLog (@" 2===%@", [NSThread currentThread]);
dispatch_group_leave (group);
});
dispatch_group_wait (group, DISPATCH_TIME_FOREVER);
dispatch_group_enter (group);
dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), pp, ^{
NSLog (@" 3");
NSLog (@" 3===%@", [NSThread currentThread]);
dispatch_group_leave (group);
});
dispatch_group_notify (group, dispatch_get_global_queue (0, 0), ^{
NSLog (@" ");
});
}
- (void)test1 {
NSOperationQueue *oq = [[NSOperationQueue alloc] init];
NSBlockOperation *bo1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog (@" 1");
NSLog (@" 1===%@", [NSThread currentThread]);
}];
NSBlockOperation *bo2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog (@" 2");
NSLog (@" 2===%@", [NSThread currentThread]);
[oq cancelAllOperations];
}];
NSBlockOperation *bo3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog (@" 3");
NSLog (@" 3===%@", [NSThread currentThread]);
}];
[bo3 addDependency:bo2];
[bo2 addDependency:bo1];
[oq addOperations:@[bo3, bo2, bo1] waitUntilFinished:YES];
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.