diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-01-30 13:41:03 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-30 13:41:03 +0100 |
commit | 22ef1fa23db420522d8ba0126e1708b992c82dc3 (patch) | |
tree | ecf6f754ca221295d2c93f9621eac0acffcef009 | |
parent | fb08607aeecb8f70f998058f39aded11df9426ea (diff) | |
parent | b4d369c887001a824a4f27e59e3e300c8d4a5bb7 (diff) |
Merge pull request #16162 from hpvb/implement-windows-processor-count
Implement OS::get_processor_count() for Windows
-rw-r--r-- | platform/windows/os_windows.cpp | 30 | ||||
-rw-r--r-- | platform/windows/os_windows.h | 3 |
2 files changed, 33 insertions, 0 deletions
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 43f2a5cf7d..a2a51f10a7 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -2211,6 +2211,36 @@ String OS_Windows::get_locale() const { return "en"; } +// We need this because GetSystemInfo() is unreliable on WOW64 +// see https://msdn.microsoft.com/en-us/library/windows/desktop/ms724381(v=vs.85).aspx +// Taken from MSDN +typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL); +LPFN_ISWOW64PROCESS fnIsWow64Process; + +BOOL is_wow64() { + BOOL wow64 = FALSE; + + fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "IsWow64Process"); + + if (fnIsWow64Process) { + if (!fnIsWow64Process(GetCurrentProcess(), &wow64)) { + wow64 = FALSE; + } + } + + return wow64; +} + +int OS_Windows::get_processor_count() const { + SYSTEM_INFO sysinfo; + if (is_wow64()) + GetNativeSystemInfo(&sysinfo); + else + GetSystemInfo(&sysinfo); + + return sysinfo.dwNumberOfProcessors; +} + OS::LatinKeyboardVariant OS_Windows::get_latin_keyboard_variant() const { unsigned long azerty[] = { diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index c24e35e929..7308650695 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -253,6 +253,9 @@ public: virtual String get_executable_path() const; virtual String get_locale() const; + + virtual int get_processor_count() const; + virtual LatinKeyboardVariant get_latin_keyboard_variant() const; virtual void enable_for_stealing_focus(ProcessID pid); |