当前位置:  开发笔记 > 编程语言 > 正文

如何将外部DLL限制为一个CPU?

如何解决《如何将外部DLL限制为一个CPU?》经验,为你挑选了2个好方法。

我有一个程序,我想只在一个CPU上运行,所以它不会占用太多的系统资源.问题是,它调用外部DLL,自动使用所有可用的CPU内核.我没有外部DLL的源代码.如何将DLL限制为仅使用一个CPU?

编辑:感谢您的帮助,这是我用来限制到一个CPU(Windows)的代码:

// Limit the process to only 1 thread so we don't chew up system resources
HANDLE ProcessHandle = GetCurrentProcess();
DWORD ProcessAffinityMask;
DWORD SystemAffinityMask;
if(GetProcessAffinityMask(ProcessHandle,&ProcessAffinityMask,&SystemAffinityMask)
    && SystemAffinityMask != 0)
{
    // Limit to 1 thread by masking all but 1 bit of the system affinity mask
    DWORD NewProcessAffinityMask = ((SystemAffinityMask-1) ^ SystemAffinityMask) & SystemAffinityMask;
    SetProcessAffinityMask(ProcessHandle,NewProcessAffinityMask);
}

编辑:结果Brannon设置流程优先级的方法更适合我想要的,这是为了防止流程咀嚼资源.这是代码(Windows):

// Make the process low priority so we don't chew up system resources
HANDLE ProcessHandle = GetCurrentProcess();
SetPriorityClass(ProcessHandle,BELOW_NORMAL_PRIORITY_CLASS);

Ates Goral.. 9

您可以设置程序的CPU亲和力.在Windows上尝试SetProcessAffinityMask函数或在Linux 上尝试sched_setaffinity.



1> Ates Goral..:

您可以设置程序的CPU亲和力.在Windows上尝试SetProcessAffinityMask函数或在Linux 上尝试sched_setaffinity.



2> Brannon..:

设置处理器关联是错误的方法.让操作系统处理调度.

如果机器闲置,您希望尽可能多地使用处理器.否则你无缘无故就会做更少的工作.如果机器繁忙,那么您希望使用"自由"循环而不会对其他过程产生负面影响.

Windows内置了此功能.对此的正确解决方案是设置进程的基本优先级.

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms686219(VS.85).aspxSetPriorityClass().

如果要在不编写任何代码的情况下进行测试,请使用"任务管理器"更改进程的优先级.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有