在具体处理器上执行外部进程并等待终止

时间:2014-06-19 17:55:39

标签: .net

我正在寻找在.net应用程序中执行外部程序。

我需要为该程序分配一个具体的处理器。 我需要在不同的处理器上多次执行程序。 我需要等待外部程序终止。

为了简化我已经完成了一个小的尖峰(控制台)应用程序来处理它:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

    namespace ExecuteExternalInParallelWithAffinity
    {
        class Program
        {
            static void Main(string[] args)
            {
                for (int i = 1; i < 3; i++)
                {
                    var processnumber = i;
                    Task.Factory.StartNew(() =>
                        {                        
                            Process p = Process.Start("notepad.exe");                       
                            p.ProcessorAffinity = (IntPtr)processnumber;
                        }).ContinueWith(t => 
                        {
                            Console.Out.WriteLine(string.Format("Process ended on processor: {0}", processnumber));
                        });
                }
                Console.ReadKey();
            }
        }
    }

我的问题:
1.-我可以在执行过程之前分配处理器关联 2.-尽管我在任务管理器上签入Notepad,但所有这些都被分配给处理器0。

1 个答案:

答案 0 :(得分:0)

Process类不支持在新进程启动之前设置某些设置。但是,原生CreateProcess API确实允许这样做。你必须使用那个。

以暂停状态启动进程。设置您喜欢的所有设置。然后,恢复它。这样,该进程中的所有代码都将在新设置下运行。