diff --git a/stl/src/cthread.cpp b/stl/src/cthread.cpp index 8f1c761cd5f..42a757f76f6 100644 --- a/stl/src/cthread.cpp +++ b/stl/src/cthread.cpp @@ -4,6 +4,7 @@ // thread functions #include "awint.h" +#include #include #include #include @@ -99,9 +100,15 @@ _Thrd_id_t _Thrd_id() { // return unique id for current thread } unsigned int _Thrd_hardware_concurrency() { // return number of processors - SYSTEM_INFO info; - GetNativeSystemInfo(&info); - return info.dwNumberOfProcessors; + DWORD_PTR process_affinity_mask; + DWORD_PTR system_affinity_mask; + if (GetProcessAffinityMask(GetCurrentProcess(), &process_affinity_mask, &system_affinity_mask)) { + std::bitset process_affinity_mask_bits( + static_cast(process_affinity_mask)); + return static_cast(process_affinity_mask_bits.count()); + } else { + return 0; + } } // TRANSITION, ABI: _Thrd_create() is preserved for binary compatibility