【问题标题】:What is the Cocoa or Carbon replacement equivalents of deprecated Multiprocessing Services on OSX?OSX 上已弃用的多处理服务的 Cocoa 或 Carbon 替代等价物是什么?
【发布时间】:2012-03-28 10:31:03
【问题描述】:

因此,我正在使用非常旧的 C++/Carbon 代码更新一个大型项目,但我不断遇到不推荐使用的函数。

所以我想这个问题有两个方面。

直接的问题是:

应该使用什么来代替 10.7 中已弃用的以下函数?是否有可可等价物或更新的碳等价物?

MPCreateEvent MP删除事件 MPWaitForEvent MPSetEvent

问题的第二部分是,在 Apple 开发者网站或其他地方,我是否可以找到更多关于在旧代码被正式弃用的情况下应该使用什么的信息?

【问题讨论】:

    标签: objective-c macos cocoa macos-carbon


    【解决方案1】:

    首先,您应该阅读Concurrency Programming Guide。在 Cocoa 应用程序中实现并发的方法有多种,该指南详细解释了它们。

    可能与 Carbon 函数最接近的类似物是各种 Grand Central Dispath (GCD) 函数,它允许您通过传递 Objective-C 块在后台进程中运行代码:

    dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(aQueue, ^{
        NSLog(@"Do some work in the background here.");
    });
    

    这在并发文档中有详细解释。不幸的是,我找不到任何有关弃用 Multiprocessing API 的文档。但是,该 API非常 很旧,可以追溯到 Mac OS X 之前,我怀疑 Apple 假设大多数使用它的代码已经过时了。我不羡慕你的任务!

    请注意,GCD 和块是在 10.6 中引入的。如果出于某种原因您需要支持 10.5,您可以使用该版本操作系统中引入的 NSOperation 方法。这些不像 GCD 那样易于使用,但它们可以达到类似的结果。 NSOperation 仍然可用,并且非常适合某些用例。

    【讨论】:

    • 谢谢。看起来我应该重构处理并发的代码的整个部分并使用 GCD。我不需要支持 10.5,所以应该可以很好地工作。我想这周我会读很多书;)
    • 在浏览您提供的链接后仅供参考,看起来更接近 MP 事件功能的方法是使用 NSCondition。
    猜你喜欢
    • 2020-11-11
    • 2010-11-22
    • 2011-01-26
    • 2012-01-20
    • 2014-06-18
    • 2014-01-29
    • 1970-01-01
    • 2011-04-03
    • 2012-08-23
    相关资源
    最近更新 更多