C++ 在my C+中对特定流程的全面管理失败+;控制台应用程序
在此过程中,我解决了一部分案例,多亏了NathanOliver,到目前为止,我已经获得了以下代码:C++ 在my C+中对特定流程的全面管理失败+;控制台应用程序,c++,c,C++,C,在此过程中,我解决了一部分案例,多亏了NathanOliver,到目前为止,我已经获得了以下代码: int main(){ //... bool proc1 = false, proc2 = false, proc3 = false, proc4 = false, while(true) { if(!proc1 && ProcessRunning("process1.exe")){ fun1("fun1.bat");
int main(){
//...
bool proc1 = false, proc2 = false, proc3 = false, proc4 = false,
while(true) {
if(!proc1 && ProcessRunning("process1.exe")){
fun1("fun1.bat");
proc1 = true;
}
if(!proc2 && ProcessRunning("process2.exe")){
fun1("fun2.bat");
proc2 = true;
}
if(!proc3 && ProcessRunning("process3.exe")){
fun1("fun3.bat");
proc3 = true;
}
if(!proc4 && ProcessRunning("process4.exe")){
fun1("fun4.bat");
proc4 = true;
}
}
return 0;
}
我仍然无法通过的是以下情况:
- 双击app1->
启动process1
- 当
运行时,我双击app2,这样process1
应该具有与我在第一个线程中提到的相同的行为:process2
process2
(第二个if(){}
),它将创建该.bat文件并
它执行它(killprocess2
(它可能在我打开它之前就存在了),再次启动它,删除由fun2(const char name[]){}
生成的.bat
文件)
上一个员额摘要:
int fun1(常量字符名[]){
流文件;
打开(名称,ios::out);
//开始我写的东西。蝙蝠
文件我相信您可以将.bat文件作为同步程序运行,因此,在bat无法完成并返回退出代码(您可以将其作为系统函数的返回值进行检查)之前,您的主程序将不会继续运行。您可以在基于linux的系统上使用fork的异步进程,在windows操作系统上使用CreateProcess。这如何?(C++11标准)
boolproc[]={false,false,false,false};
while(true)
{
对于(int i=0;iIs)而言,您对fun1的调用在所有四种情况下都是一个输入错误?这不会起作用,因为proc1设置为false,并且一直保持这种状态,我可以在您的代码中看到。@molbdnilo不,每个函数都有自己的名称。例如:function1
,…,function4
,并且在我的main()中正确调用了它们
。我知道标志可能是个问题,但我使用它们到目前为止只能做到这一点。我修改了fun1
函数,以便现在对您更有意义。有些人误解了您的想法:每个函数都有不同的名称(我使用fun1,2..就像一个模型一样)。每个函数创建的.bat
结构相同,但每个.bat
处理的进程不同。但在批处理文件中,您指的是进程.exe
您试图杀死的对象。因此,如果您请求进程1.exe
,则找不到该批处理文件。请尝试使用正确的进程名称创建该批处理文件。另外为什么每次执行应用程序时都要重写批处理文件?你的程序到底想做什么?我想我们需要一些解释。不知何故,似乎有一种更好、更优雅的方式来实现你的目标。
int fun1(const char name[]){
ofstream file;
file.open(name, ios::out);
//start of what I write in .bat
file << "@echo off";
file << "cd to specific path";
file << "taskkill /im process.exe* /f";
file << "start process.exe";
file << "del \"%~f0\"";
file.close();
return system(name);
}
bool proc[] = {false, false, false, false};
while(true)
{
for(int i=0 ; i<4 ; i++)
{
const std::string exeName = "process" + std::to_string(i) + ".exe";
const std::string funName = "fun" + std::to_string(i) + ".bat";
if(!proc[i] && ProcessRunning(exeName.c_str()))
{
fun1(funName.c_str());
proc[i] = true;
}
}