2011-01-23 2 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; 
} 

как высокий процесс, который я творю выполнять функцию Hello()?

ответ

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 : сначала [this] (http://www.highscore.de/boost/process/process/introduction.html). Также возможно [это] (http://www.boost.org/doc/libs/1_45_0/ doc/html/thread.html) - это то, что вы ищете. – ybungalobill

+0

Я знаю это. Я хотел поместить некоторые из моих потоков в другой процесс ... – Rella

Смежные вопросы