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# 如何获取执行线程的核心/处理器id?_C# - Fatal编程技术网

C# 如何获取执行线程的核心/处理器id?

C# 如何获取执行线程的核心/处理器id?,c#,C#,例如,我的笔记本电脑有两个内核和四个逻辑处理器的英特尔。 当我使用代码打印关于执行线程的信息时,我希望 打印执行线程的内核或逻辑处理器的id。如何在C中实现它# 这不是一个如何获取静态信息的问题,而是一个执行线程的动态信息的问题。例如,这就是我用来获取静态信息的方法 ManagementClass mc = new ManagementClass("win32_processor"); ManagementObjectCollection mColl = mc.GetInstances();

例如,我的笔记本电脑有两个内核和四个逻辑处理器的英特尔。 当我使用代码打印关于执行线程的信息时,我希望 打印执行线程的内核或逻辑处理器的id。如何在C中实现它#

这不是一个如何获取静态信息的问题,而是一个执行线程的动态信息的问题。例如,这就是我用来获取静态信息的方法

 ManagementClass mc = new ManagementClass("win32_processor");
 ManagementObjectCollection mColl = mc.GetInstances();
 foreach (ManagementObject mObj in mColl)
 {
     PropertyDataCollection pDC = mObj.Properties;
     foreach (PropertyData pd in pDC)
        Console.WriteLine("  {0} - {1}", pd.Name, pd.Value);
 }
//部分输出

Caption - Intel64 Family 6 Model 78 Stepping 3
Description - Intel64 Family 6 Model 78 Stepping 3
DeviceID - CPU0
Name - Intel(R) Core(TM) i3 - 6006U CPU @ 2.00GHz
NumberOfCores - 2
NumberOfEnabledCore - 2
NumberOfLogicalProcessors - 4
SocketDesignation - U3E1
ThreadCount - 4   // probably threads of hyper-threading, not process threads

您可以使用GetCurrentProcessorNumber

[DllImport("Kernel32.dll"), SuppressUnmanagedCodeSecurity]
public static extern int GetCurrentProcessorNumber();

static void Main(string[] args)
{
    Parallel.For (0, 10 , state => Console.WriteLine("Thread Id = {0}, CoreId = {1}",
        Thread.CurrentThread.ManagedThreadId,
        GetCurrentProcessorNumber()));
    Console.ReadKey();
}

如果您编写的是具有2核4线程的英特尔处理器,则更有意义。除非您专门设置关联,否则可能会移动重复的线程。它位于ProcessInfo结构中。请参阅Pinvoke:也请参阅msdn:然后使用WMI获取有关核心链接的详细信息:似乎对我有用。注:
使用系统安全
使用System.Runtime.InteropServices(和
使用System.Threading;