0
我使用NSOperationQueue
實現了線程池。其中我將maxConcurrentOperationCount
設置爲25
。即一次同時運行25個線程。NSOperationQueue暫停和恢復?
我使用這個NSOperationQueue
將塊上傳到服務器。所以塊分配給前25個線程。在NSOperationQueue
已滿後,我想暫停分塊讀取部分,然後每當隊列中的線程完成時,恢復分塊部分以分配新線程到NSOperationQueue
以替換完成的線程。
我的代碼:
NSOperationQueue *operationQueue = [NSOperationQueue new];
operationQueue.maxConcurrentOperationCount=5;
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(upload:) object:f_objChunkDetails->FileStream];
NSUInteger oprCnt=operationQueue.operationCount;
if(oprCnt >= 5) {
// wait till queue has a free slot
} else {
[operationQueue addOperation:operation];
}
那麼如何暫停和恢復在NSOperationQueue
使用?如何在Objective-C中實現ManualResetEvent
?
目前我正在實現使用NSOperationQueue上傳部分,因此上傳數據到服務器需要時間..而要上傳的數據來自ReadData類,它是快速執行的。所以我想暫停ReadData,直到NSOperationQueue有空間if隊列包含空間ReadData開始工作,接下來的數據被分配給NSOperationQueue ..在C#中它使用ManualResetEvent類實現。 Objective-C的可行解決方案是什麼?我們如何實現多線程的ManualResetEvent? – Snehal
如果你不喜歡我的解決方案,你可以使用'NSConditionLock'。 – Wain
我喜歡你的解決方案,但有任何其他方式來做到這一點..我想要可行的解決方案。 NSConditionLock或NSLock共享資源...我想暫停並單獨恢復我的每個線程。根據我的知識,NSConditionLock不會實現此目的。如果您認爲NSConditionLock是更好的選項,那麼可以請您提供示例代碼。 ..在c#中,我們使用ManualResetEvent類,它使用set,Reset,waitOne方法來暫停和恢復... Objective-c(MAC)的合適選項是什麼。請給出您寶貴的建議... – Snehal