2014-10-16 1 views
0

Я новичок в процессе обмена данными и искал ввод и руководство по наилучшему способу достижения следующего: у меня есть функция, которая конвертирует изображение из одного формата в другой, и я хотите, чтобы выполнял конверсии пакетных изображений с использованием нескольких процессов.Обработка нескольких файлов с использованием дочерних процессов и Boost

  • У меня есть 1000 изображений, которые я хочу, чтобы преобразовать из одного формата в другую
  • я создаю 6 дочерних процессы и хотел отправить их имя файла изображения в процесс: один ребенок один образом для преобразования.

Должен ли я просто создать 6 очереди сообщений и отправить один к каждому из процесса или лучше создать одну очередь сообщений хранения вектора имен изображений и отправить вектор процессу 6 ребенка?

Как я могу связать результат одного дочернего процесса с родительским процессом? И как я могу продолжать отправлять работу в процесс, пока я не закончил с 1000 файлами?

Я использую C++, Windows и обучение Boost.

Благодаря

Джефф

ответ

0

вам нужно несколько процессов или можно использовать один процесс с несколькими потоками ли? Вот решение с несколькими потоками (проверка https://computing.llnl.gov/tutorials/pthreads/):

  1. Создайте пул рабочих потоков с шестью (или более) рабочими потоками.
  2. Запустить темы. Они должны остановиться на мьютексе, ожидая условия. Условие : входная очередь не пуста.
  3. Загрузите данные (например, дескрипторы изображений, имена файлов) во входную очередь основного потока (синхронизируйте его доступ) и сообщите рабочим потокам.
  4. Каждый рабочий поток должен получить доступ к очереди и удалить последний элемент. Для синхронизации доступа к очереди вам понадобится .
  5. Когда поток завершает обработку изображения, он должен хранить обработанные данные (например, преобразованный образный дескриптор, имя файла) в очереди вывода (опять же, доступ также должен быть синхронизирован).
  6. Задание завершено, когда входная очередь пуста и данных больше нет. выходная имеет все обработанные данные изображения.
+0

Thanks 'fhsilva' для вашего ответа. Да, мне нужно несколько процессов, потому что для преобразования файлов используется сторонняя библиотека, которая не является потокобезопасной. Именно по этой причине мне понадобилось несколько процессов для решения проблемы безопасности потоков. Подход, который вы указали, также относится к процессам. Мне было интересно, есть ли какой-нибудь пример кода для этого, поскольку я хотел, чтобы процессы были заняты, и как только это делается с одним изображением, получите следующее изображение для обработки. –

+0

Сначала я предлагаю вам проверить, что делает библиотеку небезопасной. Возможно, вы можете обойти это с помощью подхода нитей. Обратите внимание: если библиотека что-то пишет в файловую систему, у вас могут быть проблемы даже с разными процессами. Помимо этого я рекомендую вам взглянуть на [MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365574 (v = vs.85) .aspx). Проверьте также этот полезный [ответ] (http://stackoverflow.com/questions/7127242/fastest-ipc-method-on-windows-7). – fhsilva

+0

Еще раз спасибо. У меня нет исходного кода сторонней библиотеки, поэтому я не могу заглянуть и попытаться сделать его потокобезопасным. –