C++ 使用POCO启动后台进程

C++ 使用POCO启动后台进程,c++,qt,poco,poco-libraries,C++,Qt,Poco,Poco Libraries,我正在与ROS合作,并试图在ROS QT界面中集成用于流程管理的Poco流程 以下是迄今为止我的节点的外观示例: void My_Interface::gazebo_launch_world() { std::string command = "roslaunch"; std::vector<std::string> args; args.push_back("robot_gazebo"); args.push_back("robot_gazebo.l

我正在与ROS合作,并试图在ROS QT界面中集成用于流程管理的Poco流程

以下是迄今为止我的节点的外观示例:

void My_Interface::gazebo_launch_world()
{
    std::string command = "roslaunch";
    std::vector<std::string> args;
    args.push_back("robot_gazebo");
    args.push_back("robot_gazebo.launch");
    PocoProcess pp(command, args);
    pp.run();
}

int PocoProcess::run()
{
    int rc;
    try
    {
        Poco::Pipe outPipe;
        Poco::ProcessHandle ph = Poco::Process::launch(command_, args_, 0, &outPipe, 0);
        rc = ph.id();
        Poco::PipeInputStream istr(outPipe);
        Poco::StreamCopier::copyStream(istr, std::cout);
    }
    catch (Poco::SystemException& exc)
    {
        std::cout << exc.displayText() << std::endl;
        return (-1);
    }
    return rc;
}
void My_Interface::gazebo_launch_world()
{
std::string命令=“roslaunch”;
std::向量args;
args.推回(“机器人凉亭”);
args.push_back(“robot_gazebo.launch”);
PocoProcess pp(命令,args);
pp.run();
}
int-PocoProcess::run()
{
int rc;
尝试
{
Poco::管道输出管;
Poco::ProcessHandle ph=Poco::Process::launch(命令\参数\ 0和输出管道,0);
rc=ph.id();
Poco::PipeInputStream istr(输出管);
Poco::StreamCopier::copyStream(istr,std::cout);
}
捕获(Poco::系统异常和exc)
{

好的,解决方案是将管道从输出中分离出来,因为它阻止了等待显示它的过程,我更改了下面的代码(只是注释管道),结果成功了

void My_Interface::gazebo_launch_world()
{
    std::string command = "roslaunch";
    std::vector<std::string> args;
    args.push_back("robot_gazebo");
    args.push_back("robot_gazebo.launch");
    PocoProcess pp(command, args);
    pp.run();
}

int PocoProcess::run()
{
    int rc;
    try
    {
        Poco::ProcessHandle ph = Poco::Process::launch(command_, args_);
        rc = ph.id();
    }
    catch (Poco::SystemException& exc)
    {
        std::cout << exc.displayText() << std::endl;
        return (-1);
    }
    return rc;
}
void My_Interface::gazebo_launch_world()
{
std::string命令=“roslaunch”;
std::向量args;
args.推回(“机器人凉亭”);
args.push_back(“robot_gazebo.launch”);
PocoProcess pp(命令,args);
pp.run();
}
int-PocoProcess::run()
{
int rc;
尝试
{
Poco::ProcessHandle ph=Poco::Process::launch(命令、参数);
rc=ph.id();
}
捕获(Poco::系统异常和exc)
{
标准::cout