【问题标题】:Howto make sure NSOperationQueue is really empty如何确保 NSOperationQueue 真的是空的
【发布时间】:2013-02-22 19:16:16
【问题描述】:

在我的应用程序中,我通过循环遍历我想要对其执行某些操作的文件数组来向我的 NSOperationQeueu 添加并发操作。我想知道队列何时为空且所有操作都已完成,所以我使用(缩短版):

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

        if (object == myLocalModeController.myFileobjectsQueue && [keyPath isEqualToString:@"operations"]) {


        if ([myLocalModeController.myFileobjectsQueue.operations count] == 0) {
            NSLog(@"Local: Fileobject creation has completed");  
          }
        }
     }

我的问题是,有时操作非常轻量,以至于在队列仍在添加时它们立即完成。这导致队列中的项目数为零但操作尚未完成的频繁发生。但是,根据我当前的设置,程序认为操作已经完成,因为“[myLocalModeController.myFileobjectsQueue.operations count] == 0”。有关如何确保队列确实完成并且所有操作都已结束的任何建议?谢谢。干杯,特隆德

【问题讨论】:

    标签: objective-c macos cocoa nsoperation nsoperationqueue


    【解决方案1】:

    您可能希望在使用 setSuspended 添加操作时阻止所有操作:

    - (void)setSuspended:(BOOL)suspend;
    

    所以在添加所有操作之前将其设置为 YES,完成后将其设置为 NO。

    【讨论】:

    • 好答案。或者 Trond 可以只添加一个全局“仍在设置”标志,或其他属性,如“configuringOperations”。
    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多