2011-01-23 57 views
3

因此,我想,虽然它并没有被接纳进入Boost发布尚未做一些与Boost.ProcessBoost.Process - 如何让一个进程运行一个函数?

simpliest PROGRAMM会是什么样子

#include <boost/process.hpp> 
#include <string> 
#include <vector> 

namespace bp = ::boost::process; 

void Hello() 
{ 
    //... contents does not matter for me now - I just want to make a new process running this function using Boost.Process. 
} 

bp::child start_child() 
{ 
    std::string exec = "bjam"; 

    std::vector<std::string> args; 
    args.push_back("--version"); 

    bp::context ctx; 
    ctx.stdout_behavior = bp::silence_stream(); 

    return bp::launch(exec, args, ctx); 
} 

int main() 
{ 
    bp::child c = start_child(); 

    bp::status s = c.wait(); 

    return s.exited() ? s.exit_status() : EXIT_FAILURE; 
} 

我创造如何高大的进程执行你好()函数?

回答

7

你不能。另一个进程是另一个可执行文件除非你生成同一程序的另一个实例,否则子进程甚至不会包含Hello()函数。

如果孩子是你的程序的另一个实例,您需要定义自己的方式告诉孩子跑你好()。这可能是工艺参数或性病的一些协议:CIN(即使用标准输入进程间通信)

在UNIX/Linux平台上,你可以启动另一个过程,而不是运行不同的可执行文件。请参阅fork(2)系统调用。然后你可以在子里调用Hello()。但是boost :: process:launch(在这样的平台上映射到fork + exec,plain fork()不是通过boost提供的,例如因为它不存在于其他平台上

可能存在极其平台 - 依赖方式做你想做的事,但你不想去那里

+0

所以这意味着Boost.Process只是一个库,可以启动不止一次的命令行参数我的过程? – Rella 2011-01-23 17:09:38

相关问题