2011-01-23 5 views
3

Boost.Processで何かしようとしていますが、Boostディストリビューションにまだ受け入れられていません。Boost.Process - プロセスに関数を実行させる方法?

最も単純プログラムの開発は、私はこんにちは()関数を実行するために作成していますどのように背の高いプロセスへ

#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()関数も含まれません。

子がプログラムの別のインスタンスである場合、Hello()を実行するように子に指示する独自の方法を定義する必要があります。これは、プロセス引数またはstd:cin(つまり、プロセス間通信用の標準入力を使用する)上のプロトコルです。UNIX/Linuxプラットフォームでは、別のプロセスを開始し、別の実行可能ファイルを実行することはできません。 fork(2)システムコールを参照してください。次に、子どもの中でHello()を呼び出すことができます。しかしboost :: process:launch(9 map to fork + execなど)他のプラットフォームには存在しないため、通常のfork()はboostによって公開されません。

あなたが望むことをやりたいのですが、あなたはそこに行きたくはありません。

+0

これはBoost.Processが異なるコマンドライン引数で複数回プロセスを起動できるライブラリであることを意味しますか? – Rella

+0

@Kabumbus :ready [this](http://www.highscore.de/boost/process/process/introduction.html)。これもおそらく[this](http://www.boost.org/doc/libs/1_45_0/)です。 doc/html/thread.html)はあなたが探しているものです – ybungalobill

+0

私はそれを知っています。私はスレッドのいくつかを別のプロセスに入れたいと思っていました... – Rella

関連する問題