Каковы эквиваленты замены какао или углерода устаревших многопроцессорных служб в OSX? - PullRequest
3 голосов
/ 12 марта 2012

Итак, я работаю над обновлением большого проекта с очень старого кода C ++ / Carbon и продолжаю работать с устаревшими функциями.

Так что я думаю, что у этого вопроса есть два аспекта.

Непосредственный вопрос:

Что следует использовать вместо следующих функций, которые устарели в 10.7?Существуют ли какао-эквиваленты или обновленные углеродные эквиваленты?

MPCreateEvent MPDeleteEvent MPWaitForEvent MPSetEvent

И вторая часть вопроса: есть ли место на сайте разработчиков Apple - или где-то еще - что яможете найти больше информации о том, что следует использовать в тех случаях, когда старый код официально устарел?

1 Ответ

5 голосов
/ 12 марта 2012

Прежде всего, вы должны прочитать Руководство по программированию параллелизма . Существует несколько способов достижения параллелизма в приложениях Какао, и это руководство объясняет их все подробно.

Вероятно, наиболее близким аналогом функций 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.");
});

Все это подробно объясняется в документах по параллелизму. К сожалению, мне не удалось найти какую-либо документацию об устаревании многопроцессорного API. Тем не менее, этот API очень устарел, начиная с Mac OS X, и я подозреваю, что Apple полагает, что большая часть кода, использующего его, давно устарела. Я не завидую твоей задаче!

Обратите внимание, что GCD и блоки были введены в 10.6. Если по какой-то причине вам требуется поддержка 10.5, вы можете использовать методы NSOperation, которые были представлены в этой версии ОС. Они не так просты в использовании, как GCD, но могут достичь аналогичного результата. NSOperation все еще доступен и очень хорош для определенных случаев использования.

...