GetCurrentProcessorNumber()如何工作? 运行时线程的CPU核心?

是否有任何流畅的方法来查找运行时在multithreading代码中运行的线程的CPU核心ID? 我试图使用GetCurrentProcessorNumber(),但它似乎没有给出各个线程正在运行的CPU核心ID。 我一直在使用的代码是:

using System; using System.Threading; using System.Threading.Tasks; using System.Diagnostics; using System.Runtime.InteropServices; class S { [DllImport("kernel32.dll")] static extern int GetCurrentProcessorNumber(); static void Main() { Task t1 = new Task(A, 1); Task t2 = new Task(A, 2); Task t3 = new Task(A, 3); Task t4 = new Task(A, 4); int myProcessorNum = GetCurrentProcessorNumber(); Console.WriteLine("processNo: " + myProcessorNum.ToString()); Console.WriteLine("Starting t1 " + t1.Id.ToString()); t1.Start(); Console.WriteLine("Starting t2 " + t2.Id.ToString()); t2.Start(); Console.WriteLine("Starting t3 " + t3.Id.ToString()); t3.Start(); Console.WriteLine("Starting t4 " + t4.Id.ToString()); t4.Start(); Console.ReadLine(); } static void A(object o) { int temp = (int)o; int myProcessorNum = GetCurrentProcessorNumber(); Console.WriteLine("Method A &" + "Thread Id: " + temp.ToString() + " and " + "processNo: " + myProcessorNum.ToString()); B(o); } static void B(object o) { int temp = (int)o; int myProcessorNum = GetCurrentProcessorNumber(); Console.WriteLine("Method B &" + "Thread Id: " + temp.ToString() + " and " + "processNo: " + myProcessorNum.ToString()); } } 

如果我重新检查核心ID,它会给出一个不同的数字:

 static void A(object o) { int temp = (int)o; int myProcessorNum = GetCurrentProcessorNumber(); Console.WriteLine("Method A &" + "Thread Id: " + temp.ToString() + " and " + "processNo: " + myProcessorNum.ToString()); myProcessorNum = GetCurrentProcessorNumber(); Console.WriteLine("Method A &" + "Thread Id: " + temp.ToString() + " and " + "processNo: " + myProcessorNum.ToString()); B(o); } 

如果你想要相同的cpu核心,你需要影响一个(或更多)!

http://omegacoder.com/?p=94

 [DllImport("kernel32.dll")] static extern IntPtr GetCurrentThread(); [DllImport("kernel32.dll")] static extern IntPtr SetThreadAffinityMask(IntPtr hThread, IntPtr dwThreadAffinityMask); 

在你的前卫:

 SetThreadAffinityMask(GetCurrentThread(), new IntPtr([nb of your cpu you want])); 

它工作我在我的应用程序上这样做