diff options
author | Dmitry Atamanov <data-man@users.noreply.github.com> | 2017-10-25 17:19:40 +0300 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-10-25 16:19:40 +0200 |
commit | aa1b575133961cf55642d8d0418e1683c211bb41 (patch) | |
tree | 0bfac548fa12cc9559cea3726730f329496e0b9e | |
parent | 49c6dbf4ab3e60a0e850ac876e54c0c6bc07de89 (diff) | |
download | Nim-aa1b575133961cf55642d8d0418e1683c211bb41.tar.gz |
[Windows] Use GetSystemInfo for obtaining processor count (#6082)
-rw-r--r-- | lib/pure/concurrency/cpuinfo.nim | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/pure/concurrency/cpuinfo.nim b/lib/pure/concurrency/cpuinfo.nim index 603fee080..66ebd155c 100644 --- a/lib/pure/concurrency/cpuinfo.nim +++ b/lib/pure/concurrency/cpuinfo.nim @@ -45,8 +45,31 @@ proc countProcessors*(): int {.rtl, extern: "ncpi$1".} = ## returns the numer of the processors/cores the machine has. ## Returns 0 if it cannot be detected. when defined(windows): - var x = getEnv("NUMBER_OF_PROCESSORS") - if x.len > 0: result = parseInt(x.string) + type + SYSTEM_INFO_UNION1_STRUCT1 {.final, pure.} = object + wProcessorArchitecture: int16 + wReserved: int16 + SYSTEM_INFO_UNION1 {.final, union, pure.} = object + dwOemId: int32 + s1: SYSTEM_INFO_UNION1_STRUCT1 + SYSTEM_INFO {.final, pure.} = object + u1: SYSTEM_INFO_UNION1 + dwPageSize: int32 + lpMinimumApplicationAddress: pointer + lpMaximumApplicationAddress: pointer + dwActiveProcessorMask: int32 + dwNumberOfProcessors: int32 + dwProcessorType: int32 + dwAllocationGranularity: int32 + wProcessorLevel: int16 + wProcessorRevision: int16 + + proc GetSystemInfo(lpSystemInfo: var SYSTEM_INFO) {.stdcall, dynlib: "kernel32", importc: "GetSystemInfo".} + + var + si: SYSTEM_INFO + GetSystemInfo(si) + result = si.dwNumberOfProcessors elif defined(macosx) or defined(bsd): var mib: array[0..3, cint] |