NSOperationQueue Pause&恢复?

时间:2014-03-19 12:21:36

标签: multithreading macos nsoperation nsoperationqueue manualresetevent

我使用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

1 个答案:

答案 0 :(得分:0)

不要等待或暂停。相反,将作业创建(和检查)转移到新方法中。该方法应循环以创建最多可用限制的作业,然后返回。创建的每个作业都应添加completionBlock,以调用作业创建方法。

通过这种方式,您可以触发事件而不是阻止。

通常,在调用作业创建方法之前,completionBlock应该更改为主线程。