如題,GetLogicalProcessorInformationEx 這個API如何使用?
https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getlogicalprocessorinformationex
這是官方檔案,需要一個有原始碼的例子!!!
第二個問題是我使用這個函式,使用頭檔案<windows.h>或者<sysinfoapi.h>,都還是會報錯,求大佬指教!!!
uj5u.com熱心網友回復:
decltype(GetLogicalProcessorInformationEx) * _GetLogicalProcessorInformationEx = NULL;
SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *pInfo;
BYTE bzData[4096];
DWORD dwSize;
BOOL bRetVal;
NSys::GetProcAddress(&_GetLogicalProcessorInformationEx, "Kernel32.dll", "GetLogicalProcessorInformationEx");
// 這個等效API GetProcAddress
pInfo = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *)bzData;
dwSize = sizeof(bzData);
bRetVal = _GetLogicalProcessorInformationEx(RelationProcessorCore, pInfo, &dwSize);
int nCoreCount = dwSize / pInfo->Size;
// 這個就是核心數
如果報錯要把錯誤資訊發出來
另外這個API在不同系統是不一樣的
uj5u.com熱心網友回復:
https://blog.csdn.net/xiaoyafang123/article/details/53374910uj5u.com熱心網友回復:
對,是這個意思,我是在win7下的VS2008使用,PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX 這些結構體全部不能識別,報錯如下:

uj5u.com熱心網友回復:
老版本的編譯器不會有新系統的一些新的結構體, 你可以更新下VS的版本, 或者手動把結構體的定義復制過來還有API也只能用 GetProcAddress 的方式
uj5u.com熱心網友回復:
是的,目前解決辦法就是我自己吧這些結構體全部定義了一遍,但是還有個問題是根據結構體來看,GetLogicalProcessorInformationEx 與 GetLogicalProcessorInformation 得到的結果似乎是一樣的?但是看資料說 不帶EX的只支持64核以下的機器,帶了EX是無限制的,請問是這樣嗎?
我想使帶EX的API就是因為我們有個客戶的電腦是雙CPU 128核 256執行緒,之前使用的不帶EX的API已經無法正確獲取資訊了,改為帶EX的之后可以正確獲取嗎?
uj5u.com熱心網友回復:
是否帶Ex應該跟作業系統有關, 如果無法獲取應該獲取錯誤錯誤代碼,128核 256執行緒 核心多的時候應該多分配記憶體, 否則會失敗
uj5u.com熱心網友回復:
在128核 256執行緒機器上使用不帶EX的API,沒有回傳錯誤代碼,只是讀取到的執行緒數是64,
這個API還和記憶體有關系嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/10478.html
標籤:硬件/系統
上一篇:VS2015除錯符號庫的問題
