我使用NSOperationQueue
实现了线程池。我将maxConcurrentOperationCount
设置为25
。即同时运行25个线程。
我正在使用此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
?
答案 0 :(得分:0)
不要等待或暂停。相反,将作业创建(和检查)转移到新方法中。该方法应循环以创建最多可用限制的作业,然后返回。创建的每个作业都应添加completionBlock
,以调用作业创建方法。
通过这种方式,您可以触发事件而不是阻止。
通常,在调用作业创建方法之前,completionBlock
应该更改为主线程。