我已经写在C两个可执行++ Windows上。 我生成的部分数据,并要拨打的其他可执行程序来处理这些数据。 我可以写数据到一个文件,然后在其他可执行读它,但似乎相当昂贵的磁盘I / O方面。 什么是这样做的更好的办法? 这似乎是一个很简单的问题,但谷歌只是没有帮助!
比方说,该数据为100MB左右,并在其全部需要发送(即不需要流)之前产生。
混合32位和64个程序时运行的答案可以获得奖励积分。
我已经写在C两个可执行++ Windows上。 我生成的部分数据,并要拨打的其他可执行程序来处理这些数据。 我可以写数据到一个文件,然后在其他可执行读它,但似乎相当昂贵的磁盘I / O方面。 什么是这样做的更好的办法? 这似乎是一个很简单的问题,但谷歌只是没有帮助!
比方说,该数据为100MB左右,并在其全部需要发送(即不需要流)之前产生。
混合32位和64个程序时运行的答案可以获得奖励积分。
如果您的过程可以很容易地写入和读取文件,只是继续前进。 创建文件CreateFile
并将其标记为临时和共享。 Windows使用此提示延迟物理写入,但所有的文件语法仍然服从。 由于您的文件只有100 MB,并积极在使用时,Windows几乎可以肯定是能够保持它的内容完全在RAM中。
您可以使用Boost.MPI 。 这是从升压,具有较高的质量标准和代码示例似乎很明确:
http://www.boost.org/doc/libs/1_53_0/doc/html/mpi/tutorial.html#mpi.point_to_point
// The following program uses two MPI processes to write "Hello, world!"
// to the screen (hello_world.cpp):
int main(int argc, char* argv[])
{
mpi::environment env(argc, argv);
mpi::communicator world;
if (world.rank() == 0) {
world.send(1, 0, std::string("Hello"));
std::string msg;
world.recv(1, 1, msg);
std::cout << msg << "!" << std::endl;
} else {
std::string msg;
world.recv(0, 0, msg);
std::cout << msg << ", ";
std::cout.flush();
world.send(0, 1, std::string("world"));
}
return 0;
}
假设你只是想去“一个方向”(即,你不需要BACK从子进程得到的数据),可以使用_popen()
您将数据写入到管道和子进程从读取数据stdin
。
如果你需要数据的双向流动,那么你就需要使用两个管道,一个输入,一个作为输出,你将需要建立一个方案,子进程如何连接到这些管道[你还可以设置标准输入/输出是数据路径,但你也可以使用一对命名管道。
第三种选择是一个共享存储器区。 我从来没有在Windows中做到了这一点,但原则是几乎相同正如我在Linux中使用过[和多年早在OS / 2]:1.在你的父进程创建一个具有给定名称的存储区。 2.子进程打开相同的内存区域。 3.数据由父进程存储和子进程读取。 4.如果需要,信号量或类似可用于用信号通知完成/结果就绪/等。