MPProcessors устарела в Mac OS 10.7.Какая альтернатива? - PullRequest
3 голосов
/ 22 июля 2011

Я работаю над фрактальным приложением рендеринга, код которого восходит к 10.4. Он использует NSThreads для управления потоками рендеринга для вычисления фракталов.

До недавнего времени он поддерживал операционные системы вплоть до 10.4, поэтому я даже не мог обновить его до использования NSOperationQueues.

Приложение FractalWorks теперь доступно в магазине приложений Mac, минимальное требование к ОС для которого составляет 10.6.6. Таким образом, мы отказались от поддержки старых ОС и вернемся к ней и переработаем рендеринг для использования NSOperationQueues или GCD.

В то же время я хочу, чтобы все было запущено и запущено в только что выпущенном Lion. В частности, я хочу избавиться от вызовов длинного списка, которые больше не поддерживаются в 10.7. Этот первый проход будет апгрейдом.

В настоящее время приложение использует метод MPProcessors для определения количества ядер в системе, поэтому оно может создать поток рендеринга для каждого ядра. Он отлично работает, а MPProcessors даже допускает гиперпоточность на i5 / i7 и позволяет программе создавать вдвое больше потоков рендеринга, чем ядер.

Мне нужен современный вызов, который позволит мне запросить у системы количество логических ядер, точно так же, как сейчас делают MPProcessors. Документы просто говорят, что метод устарел, не предлагая альтернативы. Какая альтернатива? (И не говорите мне GCD / NSOperationQueues. Я знаю, что это путь, но это большая работа, чем я готов взять на себя прямо сейчас.)

Заранее спасибо,

Дункан Шампни WareTo

1 Ответ

5 голосов
/ 22 июля 2011

в какао: [NSProcessInfo processInfo].processorCount

В BSD-ese: sysctlbyname("hw.ncpu", ...)

с гештальтом: Gestalt(gestaltCountOfCPUs, &count);

...