C# 如何将两个线程分配给不同的CPU

ClementDik 2008-09-22 05:41:32
双核处理器。WindowsXP操作系统。
同一个进程,有两个相互独立的线程。
我想让两个线程分别在两个不同的CPU上执行。

我查资料说API SetThreadAffinityMask()可以设置。
但是,C#的封装是什么呢?
我只找到一个Process.ThreadAffinity属性。这个不能指定单个线程吧?
...全文
898 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
nonocast 2012-07-16
  • 打赏
  • 举报
回复

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;
}
}
hwphu 2008-09-23
  • 打赏
  • 举报
回复
mark
cc_net 2008-09-23
  • 打赏
  • 举报
回复
不错,有意思

一些CPU测试软件目前都是怎对单核的
Mickey_Katy 2008-09-23
  • 打赏
  • 举报
回复
其他地方抄的

[DllImport("kernel32.dll")]
static extern IntPtr GetCurrentThread();
[DllImport("kernel32.dll")]
static extern IntPtr SetThreadAffinityMask(IntPtr hThread, IntPtr dwThreadAffinityMask);
gaocumt 2008-09-23
  • 打赏
  • 举报
回复
mark
以后来学习
ClementDik 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 XPingguo 的回复:]
如果API可以,就用API实现
API不是离CPU更近
[/Quote]
SetThreadAffinityMask()貌似可以。
但是我用C++会调API。用C#呢?
ClementDik 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luolixin 的回复:]
这个题目有意思,关注,同时试问楼主,为什么有这种需求呢?
[/Quote]
纯属娱乐。在琢磨别的问题时想到的。
ClementDik 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Mickey_Katy 的回复:]
其他地方抄的

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

我也就找到这么一个方法。
XPingguo 2008-09-22
  • 打赏
  • 举报
回复
如果API可以,就用API实现
API不是离CPU更近
slimfeng 2008-09-22
  • 打赏
  • 举报
回复
不懂,学习
hangang7403 2008-09-22
  • 打赏
  • 举报
回复
帮顶
luolixin 2008-09-22
  • 打赏
  • 举报
回复
这个题目有意思,关注,同时试问楼主,为什么有这种需求呢?
vrhero 2008-09-22
  • 打赏
  • 举报
回复
.NET是应用层虚拟机...也就是说不会封装这种硬件抽象层的东西,不给你操作CPU的机会...除非使用非托管代码...
ClementDik 2008-09-22
  • 打赏
  • 举报
回复
自己顶自己。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧