C++ 使用POCO启动后台进程
我正在与ROS合作,并试图在ROS QT界面中集成用于流程管理的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
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