J'ai un serveur avec deux processeurs physiques. Je veux définir un processus en cours à un groupe spécifique comme si je le faisais manuellement à partir du gestionnaire de tâches. Notez que ce n'est pas une affinité mais un groupe de processeurs (chaque groupe a 16 processeurs logiques). Je n'ai trouvé aucun moyen de le faire ni en C# ni en C++. Alternativement j'ai essayé de créer un processus avec l'attribut préréglé:Affectation d'un processus à un groupe de processeurs
LPPROC_THREAD_ATTRIBUTE_LIST pAttribs = NULL;
WORD iNuma = 0;
STARTUPINFOEX sInfoEx;
sInfoEx.StartupInfo.cb = sizeof(sInfoEx);
DWORD size;
int success = InitializeProcThreadAttributeList(0, 1, 0, &size);
pAttribs = reinterpret_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(HeapAlloc(GetProcessHeap(), 0, size));
success = InitializeProcThreadAttributeList(pAttribs, 1, 0, &size);
success = UpdateProcThreadAttribute(pAttribs, 0, PROC_THREAD_ATTRIBUTE_PREFERRED_NODE, &iNuma, sizeof(iNuma), NULL, NULL);
long err = GetLastError();
auto fCreationFlags = EXTENDED_STARTUPINFO_PRESENT;
PROCESS_INFORMATION pi = { 0 };
STARTUPINFOEX si = { 0 };
si.StartupInfo.cb = sizeof(si);
si.lpAttributeList = pAttribs;
int p = CreateProcess(NULL, L"notepad.exe", NULL, NULL, false, fCreationFlags, NULL, NULL, &si.StartupInfo, &pi);
l'appel à CreateProcess bloque l'application avec la violation d'accès.
Ce code ne fonctionne pas non plus. Il chagnes juste affinité d'un fil, mais ne semble pas qu'il affecte le groupe d'un processus: How Can I Set Processor Affinity in .NET?
Super! Cela a résolu le problème de la création de processus. J'aimerais qu'il y ait une solution pour changer le groupe de processus du processus existant. – sergman