使用C++的单个生产者和多个消费者

Single producer and multiple consumer using C++

本文关键字:消费者 生产者 C++ 单个 使用      更新时间:2023-10-16

我使用C++,有一个简单的client.exe,当传递文件名时,它会处理它并返回成功或错误代码。我想创建一个Windows C++.exe,它可以执行以下操作,并正在寻找示例代码:

  • 启动4(或x)client.exe作为单独的进程(例如使用CreateProcess)
  • 当文件列表不为空时将工作发送给客户端:每个客户端都将处理一个发送的文件名,并返回其中一个成功
    或错误代码
  • 一旦要处理的文件列表为空(或生产者.exe关闭),请关闭
    4个客户端(因此它们关闭)

我对此做了一些研究,发现管道可以用于进程之间的通信。我发现了这个用c++在服务器和客户端之间进行通信的示例应用程序:https://code.msdn.microsoft.com/windowsapps/CppNamedPipeServer-d1778534

然而,示例应用程序确实会将请求从客户端发送到服务器并获得响应,我想修改它,或者使用不同的示例应用程序通过具有一个公共的工作队列(或存储该队列或一批工作的管道)来进行批处理,并将工作发送到客户端。我想同步这项工作,这样一旦客户端处理完一个文件,我就会向它发送另一个文件进行处理。

基本上,我想创建一个示例application.exe来启动多个客户端,并通过进程间通信发送它们的工作。任何示例C++代码都可以做到这一点,我们将不胜感激。

感谢

Jeff Lacoste

您可以看看boost。它有boost::interprocess,在这里你可以阅读很多关于IPC方法的想法。

我个人从不使用boost::interprocess,因为我是boost::asio的超级粉丝,就像出于您的目的一样,它拥有您需要的一切(除了创建流程)。

在谷歌上还有很多可以找到的东西,而且它完全是基于意见的,使用什么库或直接使用本机操作系统API,这就是为什么我想知道这个问题还没有结束。

至于您提供"代码示例"的请求,这2个链接包含您列出的关于IPC的所有内容的示例,并且它是开源的,因此您可以查看库如何与本机操作系统API通信。