c++ - 从 C++ 程序运行两个系统命令并等待两者完成
问题描述
我正在编写一个 C++ 程序,在某些时候我需要使用动态定义的参数运行的另外两个程序的输出。目前我运行两个外部程序,如下例所示:
...
system("prog1 arg1".c_str());
system("prog2 arg2".c_str());
if(output1_exist() && output2_exist()){
data1 = loadoutput1();
data2 = loadoutput2();
dosomething(data1, data2);
} else {
cerr << "error" << endl;
exit(1);
}
...
关键是两个外部程序都可以运行很长时间,所以我想同时运行它们并使用while循环和睡眠来等待两者完成:
...
system("prog1 arg1 &".c_str());
system("prog2 arg2 &".c_str());
while(true){
if(output1_exist() && output2_exist()){
break;
} else {
sleep(60);
}
}
data1 = loadoutput1();
data2 = loadoutput2();
dosomething(data1, data2);
...
这种方法的问题在于,如果一个或两个外部程序由于某种原因失败,我将永远被锁定在 while 循环中。为了避免这个问题,我想使用两个线程,如下例所示:
...
void runextprog(string command){
system(command.c_str())
}
...
vector < thread > threadVect;
threadVect.clear();
threadVect.emplace_back(runextprog, "prog1 arg1");
threadVect.emplace_back(runextprog, "prog2 arg2");
threadVect[0].join();
threadVect[1].join();
if(output1_exist() && output2_exist()){
data1 = loadoutput1();
data2 = loadoutput2();
dosomething(data1, data2);
} else {
cerr << "error" << endl;
exit(1);
}
...
这应该可行,但对我来说似乎有点过分了。
那么,有人可以建议我以更优雅和简单的方式来做我正在寻找的事情吗?我正在开发一个多核 linux 工作站,我可能总是在类似的设置中运行我的程序,但是可以在 win/mac 机器上运行的便携式解决方案将不胜感激。谢谢你。
解决方案
推荐阅读
- angular - 如何解决来自 Google Chrome 的此警告?Cookie... `SameSite=None` 但没有 `Secure`
- python - 在不使用枚举的情况下计算文件中的行数
- javascript - 仅在分派时在 Vuex Action 中加载包
- javascript - 如何在数组中呈现当前日期?
- php - 将应用程序部署到共享主机时未加载资产
- api - 在.Net Core API中上传具有属性的多个文件作为子对象并在Swagger中进行测试
- android - RecyclerView 仅在按下图标后显示
- sql-server - BCP 错误“无法打开 BCP 格式文件”
- eclipse - XML-api.jar 和 org.xml.sax 类与 JAVA 11 有问题
- xpath - xpath:根据父节点的类型过滤选定的节点