当前位置: 首页 > 知识库问答 >
问题:

并行运行两个可执行文件

柯浩壤
2023-03-14

我正在尝试并行运行两个exe程序。我想启动它们,等待它们完成后再继续。以下是一个例子:

static void Main(string[] args)
{
   ProcessStartInfo proc1Info = new ProcessStartInfo("Testexe.exe");
   proc1Info.ErrorDialog = false;
   proc1Info.UseShellExecute = false;
   proc1Info.RedirectStandardOutput = true;
   proc1Info.RedirectStandardError = true;
   proc1Info.Arguments = "5000";

   ProcessStartInfo proc2Info = new ProcessStartInfo("Testexe1.exe");
   proc2Info.ErrorDialog = false;
   proc2Info.UseShellExecute = false;
   proc2Info.RedirectStandardOutput = true;
   proc2Info.RedirectStandardError = true;
   proc2Info.Arguments = "10000";

   Console.WriteLine("Start Proc 1"); 
   Process proc1 = new Process();
   proc1.StartInfo = proc1Info;
   var task1 = Task.Factory.StartNew(() => proc1.Start());

   Console.WriteLine("Start Proc 2"); 
   Process proc2 = new Process();
   proc2.StartInfo = proc2Info;
   var task2 = Task.Factory.StartNew(() => proc2.Start());

   Console.WriteLine("Wait for tasks");
   Task.WaitAll(task1, task2);
   Console.WriteLine("Procs complete");
}

第一个进程睡眠5秒,第二个进程睡眠10秒。我希望看到进程启动的两条消息和“等待任务”消息。10秒后,请参见“过程完成”。但是,我立即看到“Procs complete”。

任务管理器显示正在运行的进程,同时显示“进程完成”。

那么,我如何从一个程序中启动两个独立的可执行程序,并行运行它们,然后等待它们完成,然后再继续?

共有1个答案

韦安顺
2023-03-14

找到解决方案:静态void Main(字符串[]args){ProcessStartInfo proc1Info=new ProcessStartInfo(“Testexe.exe”);proc1Info.ErrorDialog=false;proc1Info.UseShellExecute=false;proc1Info.RedirectStandardOutput=true;proc1Info.RedirectStandardError=true;proc1Info.Arguments=“5000”;

   ProcessStartInfo proc2Info = new ProcessStartInfo("Testexe1.exe");
   proc2Info.ErrorDialog = false;
   proc2Info.UseShellExecute = false;
   proc2Info.RedirectStandardOutput = true;
   proc2Info.RedirectStandardError = true;
   proc2Info.Arguments = "10000";

   Console.WriteLine("Start Proc 1"); 
   Process proc1 = new Process();
   proc1.StartInfo = proc1Info;
   proc1.Start();

   Console.WriteLine("Start Proc 2"); 
   Process proc2 = new Process();
   proc2.StartInfo = proc2Info;
   proc2.Start();

   Console.WriteLine("Wait for Procs");
   Stopwatch sw = new Stopwatch();
   sw.Start();
   proc1.WaitForExit();
   proc2.WaitForExit();
   sw.Stop();
   Console.WriteLine("Procs complete in '{0}' ms", sw.ElapsedMilliseconds);
}
 类似资料:
  • 终端中使用lldb运行可执行文件 进入lldb环境, 在终端内输入lldb回车 lldb 使用file命令, 将可执行文件包装成一个target (lldb) file test Current executable set to '/Users/shenyj/Documents/CodeForTest/staticOCLib/test' (x86_64). 运行可执行文件, 在刚刚的l

  • 我在Eclipse中有一个maven项目。在src/main/resources下,我有一个名为“directoryToCopy”的目录,其中包含文件。一旦我运行了我的项目,我想将“directoryToCopy”复制到桌面上的本地目录“localDirec”下。 我用了这个: 这在本地工作正常,但是当我想将其作为可执行jar文件运行时,我会得到NullPointerException。 请问有什

  • 问题内容: 我在将当前项目提取到可执行jar文件时遇到问题。当我在日食中按下运行按钮时,一切正常,但是当我这样做时 然后启动.jar文件;我唯一得到的是带有灰色画布的窗口。它应该启动我编写的游戏(spaceInvaders)。 这是我上载项目的github的链接。我真的不知道错误在哪里,在哪里看。在我的代码中?在我安装的JRE / JDK中?创建罐子时我做错什么了吗? 请帮忙 -。- 问题答案:

  • 1.3 新版功能. 默认情况下,Fabric 会默认 顺序 执行所有任务(详细信息参见 Execution strategy ),这篇文档将介绍 Fabric 如何在多个主机上 并行 执行任务,包括 Fabric 参数设置、任务独立的装饰器,以及命令行全局控制。 它是如何运转的 由于 Fabric 1.x 并不是完全线程安全(以及为了更加通用,任务函数之间并不会产生交互),该功能的实现是基于 Py

  • 我试图写一个Java程序,它得到一个可执行文件运行在Linux下。此可执行文件接收两个参数,并使用这两个给定参数执行nmap-sp操作。 我将此文件称为file.exe,其内容如下: 我得到以下异常和错误日志: 线程“main”java.io.ioException中的异常:无法运行程序“file.exe”:error=2,在java.lang.runtime.exec(runtime.java:

  • 问题内容: 让我们使用例如 以下代码将为数组的每个值返回正弦值: 但是我的机器有32个内核,所以我想利用它们。(对于类似的事情,开销可能不值得,但是我实际上想要使用的功能要复杂得多,并且我将处理大量数据。) 这是最好的方法(阅读:最聪明还是最快): 还是有更好的方法来做到这一点? 问题答案: 有 是 一个更好的办法:numexpr 从他们的主页稍微改写了一下: 它是用C编写的多线程VM,可以分析表