2009-10-12 5 views
14

은 내가 그 작업의 하나 개의 비트를 수행 할 작업자 스레드가 다음 다음 유스 케이스는 등알림을받을 때까지 NSThread를 일시 중지하는 방법은 무엇입니까?

& 대기, 일시 정지, 다른 스레드에서 "좋아, 계속"명령 & 대기 일시 정지 : 제어 개체는 작업 스레드 내에서 진행되고있는 작업에 대한 정보를 표시하고 작업자가 작업을 수행 할 때 작업자가 "단일 단계"를 수행 할 수있게하려는보기입니다.

NSLog(@"paused"); 
paused = YES; 

while (paused) 
{ 
    [NSThread sleepForTimeInterval:0.25]; 
} 
NSLog(@".. continuing"); 

...하지만 도움이되지만 아마 NSLocks을 포함, 더 좋은 방법이 있어야한다고 생각 할 수 없습니다

내 노동자에 가지고 오히려 추한 및 고압적인 일이있다 , 또는 일부 그러한.

댓글, 제안 사항이 있습니까?

감사합니다.

답변

25

스레딩 가이드의 NSConditionConditions 섹션을 살펴보십시오. 코드는 다음과 같습니다.

NSCondition* condition; // initialize and release this is your app requires. 

//Worker thread: 
while([NSThread currentThread] isCancelled] == NO) 
{ 
    [condition lock]; 
    while(partySuppliesAvailable == NO) 
    { 
     [condition wait]; 
    } 

    // party! 

    partySuppliesAvailable = NO; 
    [condition unlock]; 
} 

//Main thread: 
[condition lock]; 
// Get party supplies 
partySuppliesAvailable = YES; 
[condition signal]; 
[condition unlock]; 
+0

정확히 내가 필요한 것. 감사. – Olie

+2

또한 미래의 spelunkers를 위해서 :'NSConditionLock', 여기서'[condition lockWhenCondition : suppliesAvailable]; mySupplies = [supplyQueue 내용]; [supplyQueue removeAllSupplies]; [조건 unlockWithCondition : noSuppliesAvailable]; // mySupplies를 원하는대로 사용하십시오'는 매우 유용한 패턴입니다. 제 경우에는 partySupplies보다는 처리가 필요한 데이터로 사용합니다. QED. – Olie

+0

+1 파티가 시작되었습니다. : D PartySupplies 사용 가능 및/또는 파티! – Alexandru

관련 문제