我正在尝试使用从内核32.dll导入的SetThreadAffinityMask函数在我的C#代码中设置线程亲和力。
我就是这样导入的:
[DllImport("kernel32.dll")]
static extern IntPtr SetThreadAffinityMask(IntPtr hThread, IntPtr dwThreadAffinityMask);我正在创建3个线程
Thread t1 = new Thread(some delegate);
Thread t2 = new Thread(some delegate);
Thread t3 = new Thread(some delegate);我希望设置t1的线程亲和力,t2是我使用的“`SetThreadAffinityMask函数”中的一个t3。
但我不知道如何将参数传递给这个函数。
SetThreadAffinityMask采用两个参数
HANDLE hThreadDWORD_PTR dwThreadAffinityMask请帮助我在C#中使用C#函数。
发布于 2010-03-23 08:51:53
别。
托管线程<>本机线程。
托管线程支持的唯一选项是围绕需要线程亲和力的代码调用Thread.BeginThread亲和/EndThread亲和。
发布于 2010-03-23 08:52:08
你不能用Thread.BeginThreadAffinity吗
发布于 2017-02-17 10:49:31
首先,您应该确保.NET线程在特定的操作系统线程上运行。用Thread.BeginThreadAffinity();和Thread.EndThreadAffinity();包装逻辑来实现这一点。
使用GetCurrentThread()从kernel32.dll获取当前线程句柄。
线程亲和掩码dwThreadAffinityMask在文档中描述:
线程关联掩码是位向量,其中每个位表示允许线程在其上运行的逻辑处理器。被允许继续运行。
例如,如果您想在第二个和第四个逻辑处理器上运行线程,请使用0x0A掩码。
代码示例:
[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();
}
});https://stackoverflow.com/questions/2498501
复制相似问题