2011-01-23 145 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

相關問題