From 6dd7902d6f148a4ac78e5478edb3a2ca8624f74c Mon Sep 17 00:00:00 2001 From: gcontini <1121667+gcontini@users.noreply.github.com> Date: 周日, 15 3月 2020 16:07:14 +0800 Subject: [PATCH] cpu brand --- src/library/os/windows/cpu_info.cpp | 48 ++++++++++++++++++++++++++++++++++++------------ 1 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/library/os/windows/cpu_info.cpp b/src/library/os/windows/cpu_info.cpp index f4b0e81..a58cc6c 100644 --- a/src/library/os/windows/cpu_info.cpp +++ b/src/library/os/windows/cpu_info.cpp @@ -15,7 +15,42 @@ namespace os { using namespace std; -CpuInfo::CpuInfo() {} +static string get_cpu_vendor() { + // hypervisor flag false, try to get the vendor name, see if it's a virtual cpu + int cpui[4] = {0}; + __cpuidex(cpui, 0x0, 0x0); + + char vendor[13]; + memset(vendor, 0, sizeof(vendor)); + *reinterpret_cast<int *>(vendor) = cpui[1]; + *reinterpret_cast<int *>(vendor + 4) = cpui[3]; + *reinterpret_cast<int *>(vendor + 8) = cpui[2]; + return string(vendor, 12); +} + +static string get_cpu_brand() { + int cpui[4] = {0}; + __cpuid(cpui, 0x80000000); + int maxSupported = cpui[0]; + + char brand[0x41]; + memset(brand, 0, sizeof(brand)); + string result; + if (maxSupported >= 0x80000004) { + int instruction = 0x80000002; + for (int i = 0; i <= 2; ++i) { + __cpuidex(cpui, instruction + i, 0); + memcpy(&brand[i * sizeof(cpui)], cpui, sizeof(cpui)); + } + result = string(brand); + } else { + result = "NA"; + } + + return result; +} + +CpuInfo::CpuInfo() : m_vendor(get_cpu_vendor()), m_brand(get_cpu_brand()) {} CpuInfo::~CpuInfo() {} /** @@ -38,17 +73,6 @@ return (cpui[0] & 0x3FFF) | (cpui[0] & 0x3FF8000) >> 2 | (cpui[1] & 0xff) << 24; } -string CpuInfo::vendor() const { - // hypervisor flag false, try to get the vendor name, see if it's a virtual cpu - int cpui[4] = {0}; - __cpuidex(cpui, 0x0, 0x0); - char vendor[13]; - memset(vendor, 0, sizeof(vendor)); - *reinterpret_cast<int *>(vendor) = cpui[1]; - *reinterpret_cast<int *>(vendor +4) = cpui[3]; - *reinterpret_cast<int *>(vendor + 8) = cpui[2]; - return string(vendor, 12); -} } // namespace os } /* namespace license */ -- Gitblit v1.9.1