如何在两个进程之间进行通信

时间:2012-03-12 14:49:36

标签: c++ concurrency concurrent-programming

嗨,我正在开发一个c ++项目,我正在尝试保持操作系统独立,我有两个需要通信的进程。我在考虑设置第3个进程(可能作为服务?)来异步协调其他两个进程。

客户端1将告知数据准备就绪的中间过程,并将数据发送给它。然后,中间过程将保留此数据,直到客户端2告知它已为数据做好准备。如果中间过程没有从客户端1接收到新数据,它将告诉客户端2等待。

由于我试图保持这个OS独立,我真的不知道该使用什么。我已经研究过使用MPI但它似乎并不适合这个目的。我还研究过Boost.ASIO,命名管道,RPC和RCF。我目前正在Windows中编程,但我想避免使用WIN_API,以便可能在Linux中编译代码。

这是关于这两个过程的更多细节。

我们有一个后端进程/模型(客户端1),它将通过中间进程从GUI(客户端2,用Qt编写)接收初始输入。然后,模型将继续工作,直到满足结束条件,并在服务器准备就绪时将数据发送到服务器。 GUI将定期向中间过程询问数据,并且如果模型未更新数据,将告知等待。当数据从模型中可用时,我们还希望能够保留当前会话中的任何先前数据以便导出到文件(如果用户选择这样做)(即,我们希望GUI向命令发出命令)导出(或加载)数据的接口。

我的后端/模型的修改权限很小,除了遵守上面概述的设计。我有相当数量的c ++经验,但没有太多的并行/异步应用程序体验。非常感谢任何帮助或指导。

3 个答案:

答案 0 :(得分:1)

标准BSD TCP / IP套接字大多与平台无关。它们在Windows和Unices(如linux)上都有一些细微的差别。

PS窗口不支持AF_UNIX套接字。

答案 1 :(得分:1)

我要查看boost.interprocess库。如果这两个进程在同一台机器上,它有多种不同的进程间通信方式,并且以独立于平台的方式进行。

答案 2 :(得分:0)

我不确定您是否考虑过邮件系统,但如果您要在进程之间发送结构化数据,则应考虑查看Google协议缓冲区。

这些与消息传递的内容(传递的内容)有关,而不是它们的传递方式。

boost :: asio是平台无关的,尽管它并不意味着两端都有C ++。当然,当您使用C ++时,可以使用boost :: asio作为传输方式。

相关问题