2011-08-08 4 views
0

그래서 DB 저장시 경쟁 조건이 발생하는 ASINetworkQueues 그룹이 있습니다. NSOperationQueue를 만들려고합니다.이 NSOperationQueue는 이러한 각각의 "대기열"을 대기열에 넣습니다. 현재 NSOperation을 메인 메소드와 함께 작성하여 "서브 대기열"에서 다운로드를 시작합니다.ios NSOperationQueue, 추가 할 때 작업이 모두 실행되고 대기열에 대기하지 않습니다.

제 문제는 "addOperation"을 사용하여 메인 큐에 서브 큐를 추가 할 때마다 "메인"메소드가 즉시 실행되어 서브 큐가 동시에 실행된다는 것입니다. 나는 주요한 방법이 한 번에 하나씩 해고되었다는 인상을 받았다. 즉 대기열의 최상위에서의 동작에 대해서만.

아마도 여기에 뭔가 빠져 있는데 어쩌면 첫 번째 작업이 완료 될 때까지 다른 작업을 중지하는 방법을 찾지 못하는 것 같습니다. 또한 NSUperation에 대해 isReady = 0이되는 상황에 프로그램을 추가하는 것조차 보이지 않습니다. 항상 그렇습니다.

참고 : 여기

는 일부 코드의 I 1.

NSOperation 주요 방법에 NSOperation 큐 maxConcurrentOperations을 설정 한 :

ChapterDownloadOperation *cdo = [[ChapterDownloadOperation alloc] init]; 
cdo.chapter = ch; 
[chapterDownloadQueue addOperation:cdo]; 
[cdo release]; 
:
-(void)main { 
    [subQueue download]; 
} 

는 큐 설정

여러 작업을 추가하는 경우 main 메서드가 instan에서 실행됩니다. 큐에 추가된다. 그 작동이 흔들릴 준비가되었을 때 무시하고 사용해야하는 또 다른 기능이 있습니까? 주요 방법은 작업을 설정하는 것입니다.

어떤 아이디어라도 높이 평가합니다.

고마워요.

답변

2

NSOperationQueue는 추가 처리 능력의 균형을 조정하자마자 주 메서드를 실행합니다.

큐를 한 번에 하나의 작업으로 제한하려면 대기열에 넣기 전에 각 작업간에 종속성을 추가 할 수 있습니다. [B addDependency : A]; // [B main]은 A가 끝날 때까지 호출되지 않는다.

그러나 A가 취소되면 B는 여전히 실행된다.

희망 하시겠습니까?

+0

당신이 대기열에서 작업의 배열을 얻어서 작업에 종속성을 추가 한 의미합니까 매우 유용하다는 것을 발견했다? 종속성이 제대로 작동하려면 대기열에 추가하기 전에 각 작업에 종속성을 추가해야합니다. –

+1

그러나 버튼 클릭시 작업이 생성되어 대기열에 추가됩니다. 첫 번째 작업을 다른 버튼을 탭하기 전에 먼저 대기열에 추가 할 때 첫 번째 작업을 두 번째 종속 항목으로 추가하려면 어떻게해야합니까? 아이디어가 있으십니까? – conor

+0

흠, 그런 경우에는 작업 대기열 대신 직렬 작업 대기열을 사용하는 방법을 고려해야합니다. 직렬 디스패치 큐는 한 번에 하나씩 순서대로 실행됩니다. 직렬 큐에는 [동시성 프로그래밍 가이드] (http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues)에 유용한 정보가 많이 있습니다.html # // apple_ref/doc/uid/TP40008091-CH102-SW1) –

관련 문제