J'ai un programme que je voudrais exécuter sur un seul processeur afin qu'il ne prenne pas trop de ressources système. Le problème est, il fait un appel dans une DLL externe qui utilise automatiquement tous les cœurs de processeur disponibles. Je n'ai pas le code source à la DLL externe. Comment puis-je limiter la DLL à l'aide d'un seul processeur?Comment limiter une DLL externe à une CPU?
EDIT: Merci pour l'aide, voici le code que je l'habitude de limiter à une 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);
}
EDIT: Active l'approche de Brannon de la mise en priorité du processus fonctionne encore mieux ce que je veux , qui est de garder le processus de mâcher des ressources. Voici le code (Windows):
// Make the process low priority so we don't chew up system resources
HANDLE ProcessHandle = GetCurrentProcess();
SetPriorityClass(ProcessHandle,BELOW_NORMAL_PRIORITY_CLASS);
Je pense que vous confondez votre terminologie. Ce code limite l'ensemble du processus à un seul processeur. Ce code n'a rien à voir avec les threads. – Brannon
Bon point, je vais changer les termes de "thread" à "CPU". – user18476