双核处理器。WindowsXP操作系统。
同一个进程,有两个相互独立的线程。
我想让两个线程分别在两个不同的CPU上执行。我查资料说API SetThreadAffinityMask()可以设置。
但是,C#的封装是什么呢?
我只找到一个Process.ThreadAffinity属性。这个不能指定单个线程吧?

解决方案 »

  1.   

    .NET是应用层虚拟机...也就是说不会封装这种硬件抽象层的东西,不给你操作CPU的机会...除非使用非托管代码...
      

  2.   

    如果API可以,就用API实现
    API不是离CPU更近
      

  3.   

    SetThreadAffinityMask()貌似可以。
    但是我用C++会调API。用C#呢?
      

  4.   

    其他地方抄的[DllImport("kernel32.dll")]
    static extern IntPtr GetCurrentThread();
    [DllImport("kernel32.dll")]
    static extern IntPtr SetThreadAffinityMask(IntPtr hThread, IntPtr dwThreadAffinityMask);
      

  5.   

    不错,有意思一些CPU测试软件目前都是怎对单核的
      

  6.   


    static void Main(string[] args) {
    Process Proc = Process.GetCurrentProcess();
    long AffinityMask = (long)Proc.ProcessorAffinity;
    AffinityMask &= 0x0001;
    Proc.ProcessorAffinity = (IntPtr)AffinityMask;

    int i = 0;
    while (true) {
    ++i;
    }
    }