Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在my C+中对特定流程的全面管理失败+;控制台应用程序_C++_C - Fatal编程技术网

C++ 在my C+中对特定流程的全面管理失败+;控制台应用程序

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");

在此过程中,我解决了一部分案例,多亏了NathanOliver,到目前为止,我已经获得了以下代码:

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
    启动
  • process1
    运行时,我双击app2,这样
    process2
    应该具有与我在第一个线程中提到的相同的行为:
如果找到
process2
(第二个
if(){}
),它将创建该.bat文件并 它执行它(kill
process2
(它可能在我打开它之前就存在了),再次启动它,删除由
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;
        }
    }