使用子进程和Boost处理多个文件

时间:2014-10-16 00:48:35

标签: c++ windows boost interprocess

我对进程间通信很陌生,正在寻找有关实现以下目标的最佳方法的输入和指导:我有一个将图像从一种格式转换为另一种格式的功能我想要 使用多个流程进行批量图像转换。

  • 我想要将1000种图像从一种格式转换为另一种格式
  • 我创建了6个子进程,并希望向他们发送要处理的图像文件名:一个子图像要转换。

我应该简单地创建6个消息队列并向每个进程发送一个消息队列,或者它更好 创建一个存储图像名称矢量的消息队列,并将该矢量发送到6子进程?

如何将一个子进程的结果与父进程进行通信?在我完成1000个文件之前,我如何继续将工作发送到流程中?

我正在使用C ++,Windows和学习Boost。

谢谢

杰夫

1 个答案:

答案 0 :(得分:0)

您是否需要多个进程,或者是否可以使用具有多个线程的单个进程?这是一个包含多个线程的解决方案(检查https://computing.llnl.gov/tutorials/pthreads/):

  1. 使用六个(或更多)工作线程创建一个工作线程池。
  2. 启动主题。他们应该停在互斥上,等待一个条件。该 条件是:输入队列不为空。
  3. 将数据(例如图像句柄,文件名)加载到主线程上的输入队列中 (同步其访问权限)并通知工作线程。
  4. 每个工作线程都应该访问队列并删除最后一个元素。你需要 同步对队列的访问。
  5. 当线程完成处理图像时,它应该存储处理过的数据(例如, 输出队列上的转换图像句柄(文件名)(同样也应该同步访问)。
  6. 当输入队列为空并且没有更多数据要添加时,作业完成。输出队列 拥有所有已处理的图像数据。