0
我有兩臺物理處理器的服務器。我想將當前進程設置爲特定組,就好像我是從任務管理器手動執行的那樣。請注意,它不是親緣關係,而是處理器組(每個組有16個邏輯處理器)。在C#和C++中我都找不到這種方法。或者我嘗試創建一個具有預設屬性的進程:分配進程到處理器組
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);
對CreateProcess的調用使應用程序崩潰,導致訪問衝突。
此代碼也不起作用。它只是chagnes一個線程的親和力,但不看它會影響進程的組: How Can I Set Processor Affinity in .NET?
太棒了!這解決了流程創建的問題。我希望有解決方案來改變現有流程的流程組。 – sergman