Структура программы относительно NSTask - PullRequest
1 голос
/ 26 февраля 2010

Я хочу запустить неизвестное количество (неизвестное во время компиляции) NSTasks, и я хочу запустить неизвестное количество (опять же, во время компиляции, макс. 8) их одновременно. Таким образом, в основном я перебираю список файлов, генерирую NSTask, запускаю его до тех пор, пока не будет выполнено максимальное количество одновременных задач, и каждый раз, когда завершается другой, запускается NSTask, пока все они не будут выполнены.

Мой подход заключается в создании класса, который генерирует NSTask и создает его подкласс для изменения параметров здесь и там, когда есть разные входные данные (изменения, которые вносятся из интерфейса). Затем суперкласс запустит NSTask и будет иметь метод @synthesize, возвращающий прогресс. Эти объекты будут сгенерированы в вышеупомянутом цикле повтора, и будет отображаться ход выполнения.

Это хороший путь? Если да, может ли кто-нибудь дать мне быстрый пример того, как будет выглядеть цикл повторения? Я не знаю, как бы я сослался на все объекты после их запуска.

for (; !done ;) {
    if (maxValue ≥ currentValue) {
  //Run Object with next file.
  //Set currentValue.
 }
 //display progress and set done to YES if needed and set currentValue to it -1 if needed
}

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

1 Ответ

2 голосов
/ 26 февраля 2010

Точно нет петли.

Создайте массив для задач, которые еще не запущены, другой с задачами, которые выполняются, и другой с задачами, которые завершены. Есть метод, который извлекает одну задачу из массива отложенных задач, запускает (запускает) ее и добавляет в массив работающих задач. После создания массивов и заполнения массива отложенных задач вызовите этот метод восемь раз.

Когда задача завершает , удалите задачу из массива запущенных задач и добавьте ее в массив готовых задач, а затем проверьте, есть ли еще задачи, которые еще предстоит выполнить. Если есть хотя бы один, снова вызовите метод run-another-one. В противном случае проверьте, запущены ли еще какие-либо: если нет, все задачи завершены, и вы можете собрать результаты прямо сейчас (если вы не отображали их в режиме реального времени).

...