【发布时间】:2012-03-22 09:27:07
【问题描述】:
假设我在Linux中使用一个C++程序来维护一个队列,并对队列中的数据做一些事情,现在我想在后台运行它并提供一个函数,因此其他程序可以简单地调用它来将数据拉入我的队列。
最好的方法是什么?
【问题讨论】:
假设我在Linux中使用一个C++程序来维护一个队列,并对队列中的数据做一些事情,现在我想在后台运行它并提供一个函数,因此其他程序可以简单地调用它来将数据拉入我的队列。
最好的方法是什么?
【问题讨论】:
如果你的程序作为两个独立的进程运行,你不能直接调用其他进程中的函数,你需要一个进程间通信机制(IPC)来在两个进程之间进行通信。
通常按如下方式进行:
您想要与之通信的进程提供了一个客户端库,想要与该进程通信的进程或应用程序链接到该客户端库。此客户端库提供简单的函数调用,您的调用进程/应用程序可以直接调用。客户端库实现了与远程进程通信所需的 IPC 机制。
【讨论】:
据我了解,您需要一个封装与队列通信的客户端 API。
您需要创建一个单独的库来包含和导出 API,并将其包含在想要使用它的程序中。
class Communicator
{
public:
bool putData(Data* data);
bool getData(Data*& data);
};
Communicator 的实现通过 IPC 与队列进行实际通信,但您将该层抽象出来。
【讨论】:
有多种机制可以做到这一点,从创建自己的服务器到使用 IPC、RPC、CORBA 等等。
至于最好,这取决于多种因素。
在您提到的 OP 中,您想要一个由一个进程处理它的队列 - 也许使用共享内存和互斥锁将是一个简单的解决方案,使用一个库来访问两个进程的队列。
【讨论】: