首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用从内核导入的SetThreadAffinityMask函数32.dll

使用从内核导入的SetThreadAffinityMask函数32.dll
EN

Stack Overflow用户
提问于 2010-03-23 08:46:13
回答 4查看 2.8K关注 0票数 2

我正在尝试使用从内核32.dll导入的SetThreadAffinityMask函数在我的C#代码中设置线程亲和力。

我就是这样导入的:

代码语言:javascript
复制
[DllImport("kernel32.dll")]  
static extern IntPtr SetThreadAffinityMask(IntPtr hThread, IntPtr dwThreadAffinityMask);

我正在创建3个线程

代码语言:javascript
复制
Thread t1 = new Thread(some delegate);
Thread t2 = new Thread(some delegate);
Thread t3 = new Thread(some delegate);

我希望设置t1的线程亲和力,t2是我使用的“`SetThreadAffinityMask函数”中的一个t3。

但我不知道如何将参数传递给这个函数。

SetThreadAffinityMask采用两个参数

  1. HANDLE hThread
  2. DWORD_PTR dwThreadAffinityMask

请帮助我在C#中使用C#函数。

EN

回答 4

Stack Overflow用户

发布于 2010-03-23 08:51:53

别。

托管线程<>本机线程。

托管线程支持的唯一选项是围绕需要线程亲和力的代码调用Thread.BeginThread亲和/EndThread亲和。

票数 3
EN

Stack Overflow用户

发布于 2010-03-23 08:52:08

你不能用Thread.BeginThreadAffinity

票数 3
EN

Stack Overflow用户

发布于 2017-02-17 10:49:31

首先,您应该确保.NET线程在特定的操作系统线程上运行。用Thread.BeginThreadAffinity();Thread.EndThreadAffinity();包装逻辑来实现这一点。

使用GetCurrentThread()kernel32.dll获取当前线程句柄。

线程亲和掩码dwThreadAffinityMask文档中描述:

线程关联掩码是位向量,其中每个位表示允许线程在其上运行的逻辑处理器。被允许继续运行。

例如,如果您想在第二个和第四个逻辑处理器上运行线程,请使用0x0A掩码。

代码示例:

代码语言:javascript
复制
[DllImport("kernel32.dll")]
static extern IntPtr GetCurrentThread();

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

Thread t1 
  = new Thread(() => 
  {
    try
    {
      Thread.BeginThreadAffinity();
      SetThreadAffinityMask(GetCurrentThread(), new IntPtr(0x0A));

      // <your thread logic here>          
    }
    finally
    {
      Thread.EndThreadAffinity();
    } 
  });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2498501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档