2

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; 
} 

Hello() 関数を実行するために作成しているプロセスをトールする方法は?

4

1 に答える 1

8

できません。別のプロセスは別の実行可能ファイルです。同じプログラムの別のインスタンスを生成しない限り、子プロセスには Hello() 関数さえ含まれません。

子がプログラムの別のインスタンスである場合は、子に Hello() を実行するように指示する独自の方法を定義する必要があります。これは、プロセス引数または std:cin の何らかのプロトコル (つまり、プロセス間通信に標準入力を使用する) である可能性があります。

UNIX/Linux プラットフォームでは、別のプロセスを開始できますが、別の実行可能ファイルを実行することはできません。fork(2) システムコールを参照してください。次に、子で Hello() を呼び出すことができます。ただし、boost::process:launch(9 は、そのようなプラットフォームでは fork+exec にマップされます。プレーンな fork() は、たとえば他のプラットフォームには存在しないため、boost によって公開されません。

あなたが望むことを行うための非常にプラットフォームに依存する方法があるかもしれませんが、あなたはそこに行きたくありません.

于 2011-01-23T16:59:09.413 に答える