【问题标题】:SetThreadAffinityMask is ignored....any ideas?SetThreadAffinityMask 被忽略....有什么想法吗?
【发布时间】:2010-10-20 06:18:29
【问题描述】:

更新:我发现了问题 - 令人尴尬/讽刺的是,它是在错误的线程中调用 SetThreadAffinity(),而不是主线程(程序启动很混乱......)

现在一切正常,感谢所有帮助!参加我的小型调试会议的每个人都对我投了赞成票。

【问题讨论】:

  • 你有多少线程?多少个处理器?您是为多个线程设置关联,还是只设置一个?
  • 我有两个 CPU,我只设置一个线程的亲和性。其他线程目前甚至都没有运行。
  • 请不要删除原始问题。人们可能会遇到同样的问题。

标签: windows winapi setthreadaffinitymask


【解决方案1】:

这样称呼有什么不同吗?:

DWORD_PTR mask = 1; 
SetThreadAffinityMask(GetCurrentThread(), mask);

你的线程句柄是否有必要的access rights?:

Windows Server 2003 和 Windows XP/2000:手柄必须有 THREAD_SET_INFORMATION 和 THREAD_QUERY_INFORMATION 访问权限。

【讨论】:

  • 我认为如果我没有权限,它会返回一个错误。除此之外,SetProcessAffinityMask() 完美地工作......
【解决方案2】:

虽然我使用该功能已经有几个月了,但我没有遇到任何问题。

您可能需要检查以下几点:

  • 没有冲突的 SetProcessAffinityMask 和 SetThreadAffinityMask
  • 如果处理器 2 上有一个线程,那么程序的其余部分可能正在使用处理器 1
  • 显示 GetCurrentProcessorNumber 以测试它是否在正确的 CPU 上运行。

【讨论】:

  • 那我建议你在 Vista 上试试。
【解决方案3】:

你所做的似乎是正确的,你可以试试 SetThreadIdealProcessor 吗?

【讨论】:

    猜你喜欢
    • 2021-11-06
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多