오늘을 일시 :직렬 큐에게 나는 다음 코드를 시도했습니다
는- (void)suspendTest {
dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_CONCURRENT, QOS_CLASS_BACKGROUND, 0);
dispatch_queue_t suspendableQueue = dispatch_queue_create("test", attr);
for (int i = 0; i <= 10000; i++) {
dispatch_async(suspendableQueue, ^{
NSLog(@"%d", i);
});
if (i == 5000) {
dispatch_suspend(suspendableQueue);
}
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"Show must go on!");
dispatch_resume(suspendableQueue);
});
}
코드는 10001 작업을 시작하지만 중간 육초에 재개 새 작업을 실행 한 큐를 일시 중단합니다. 이 코드 은 예상대로 작동합니다. - 5000 개의 작업이 실행 된 다음 대기열이 중지되고 6 초 후에 다시 시작됩니다. 그러나 동시 대기열 대신 직렬 대기열을 사용하면 그 동작이 나에게 명확하지 않습니다. 태스크 난수 중단하기 전에 실행 관리 이때
dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_BACKGROUND, 0);
하지만, 종종이 수가 0에 가까운 (현탁 어떤 작업이 발생하기 전에). 질문입니다 - 직렬 및 동시 대기열에 대해 일시 중단 작동이 다른 이유와 직렬 대기열을 올바르게 일시 중단하는 방법은 무엇입니까?
게시 한 코드가 컴파일되지 않습니다. 'if (i == 5000) {'줄은'for' 루프 뒤에 있습니다. – rmaddy
내 잘못으로, 방금 메모리로 재생산했습니다. 내가 고치자 –
그래,이게 진짜 코드를 브라우저에 붙여 넣지 않는 질문 중 하나 야? 나는 그걸 막을 수 없다. – matt