Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Dynamic Libraries (Windows)
#51
Get CPU threads and cores count

Code: (Select All)

Option _Explicit

Declare Dynamic Library "kernel32"
    Function GetLogicalProcessorInformation& (ByVal Buffer As _Offset, ReturnLength As _Unsigned Long)
    Function GetLastError~& ()
End Declare

Const RelationProcessorCore~& = 0
Const ERROR_INSUFFICIENT_BUFFER~& = 122

Print "Physical Cores: "; CpuCoreCount
Print "CPU logical Threads: "; CpuLogicalCount
End







Function CpuCoreCount& ()
    Dim ok As Long
    Dim retLen As _Unsigned Long
    Dim er As _Unsigned Long
    Dim mem As _MEM
    Dim ptrSize As Long, entrySize As Long
    Dim countEntries As Long, i As Long
    Dim rel As _Unsigned Long
    Dim cores As Long

    $If 64BIT Then
        ptrSize = 8
        entrySize = 32
    $Else
        ptrSize = 4
        entrySize = 24
    $End If

    retLen = 0
    ok = GetLogicalProcessorInformation(0, retLen)
    er = GetLastError

    If er <> ERROR_INSUFFICIENT_BUFFER Or retLen = 0 Then
        CpuCoreCount = 0
        Exit Function
    End If

    mem = _MemNew(retLen)
    ok = GetLogicalProcessorInformation(mem.OFFSET, retLen)
    If ok = 0 Then
        _MemFree mem
        CpuCoreCount = 0
        Exit Function
    End If

    countEntries = retLen \ entrySize
    cores = 0

    For i = 0 To countEntries - 1
        rel = _MemGet(mem, mem.OFFSET + i * entrySize + ptrSize, _Unsigned Long)
        If rel = RelationProcessorCore Then cores = cores + 1
    Next i

    _MemFree mem
    CpuCoreCount = cores
End Function


Function CpuLogicalCount& ()
    Dim ok As Long
    Dim retLen As _Unsigned Long
    Dim er As _Unsigned Long
    Dim mem As _MEM
    Dim ptrSize As Long, entrySize As Long
    Dim countEntries As Long, i As Long
    Dim rel As _Unsigned Long
    Dim logical As Long
    Dim mask64 As _Unsigned _Integer64
    Dim tmp As _Unsigned _Integer64

    $If 64BIT Then
        ptrSize = 8
        entrySize = 32
    $Else
        ptrSize = 4
        entrySize = 24
    $End If

    retLen = 0
    ok = GetLogicalProcessorInformation(0, retLen)
    er = GetLastError

    If er <> ERROR_INSUFFICIENT_BUFFER Or retLen = 0 Then
        CpuLogicalCount = 0
        Exit Function
    End If

    mem = _MemNew(retLen)
    ok = GetLogicalProcessorInformation(mem.OFFSET, retLen)
    If ok = 0 Then
        _MemFree mem
        CpuLogicalCount = 0
        Exit Function
    End If

    countEntries = retLen \ entrySize
    logical = 0

    For i = 0 To countEntries - 1
        rel = _MemGet(mem, mem.OFFSET + i * entrySize + ptrSize, _Unsigned Long)
        If rel = RelationProcessorCore Then
            If ptrSize = 8 Then
                mask64 = _MemGet(mem, mem.OFFSET + i * entrySize, _Unsigned _Integer64)
            Else
                mask64 = _MemGet(mem, mem.OFFSET + i * entrySize, _Unsigned Long)
            End If

            tmp = mask64
            Do While tmp <> 0
                tmp = tmp And (tmp - 1)
                logical = logical + 1
            Loop
        End If
    Next i

    _MemFree mem
    CpuLogicalCount = logical
End Function



Reply


Messages In This Thread
Dynamic Libraries (Windows) - by Petr - 12-08-2025, 06:48 PM
RE: Dynamic Libraries - by Petr - 12-08-2025, 07:12 PM
RE: Dynamic Libraries - by Petr - 12-08-2025, 07:52 PM
RE: Dynamic Libraries - by Jack - 12-08-2025, 08:41 PM
RE: Dynamic Libraries - by Petr - 12-09-2025, 07:21 PM
RE: Dynamic Libraries - by Petr - 12-11-2025, 04:19 PM
RE: Dynamic Libraries - by Petr - 12-12-2025, 10:00 PM
RE: Dynamic Libraries - by Petr - 12-13-2025, 05:56 PM
RE: Dynamic Libraries - by 2112 - 12-13-2025, 07:06 PM
RE: Dynamic Libraries - by ahenry3068 - 12-13-2025, 07:47 PM
RE: Dynamic Libraries - by Petr - 12-13-2025, 07:41 PM
RE: Dynamic Libraries - by 2112 - 12-13-2025, 08:23 PM
RE: Dynamic Libraries - by Petr - 12-13-2025, 08:36 PM
RE: Dynamic Libraries - by Petr - 12-13-2025, 09:03 PM
RE: Dynamic Libraries - by ahenry3068 - 12-13-2025, 11:16 PM
RE: Dynamic Libraries - by Petr - 12-14-2025, 12:15 AM
RE: Dynamic Libraries - by Petr - 12-15-2025, 08:22 AM
RE: Dynamic Libraries (Windows) - by Petr - 12-15-2025, 06:30 PM
RE: Dynamic Libraries (Windows) - by Mad Axeman - 12-19-2025, 02:37 PM
RE: Dynamic Libraries (Windows) - by Pete - 12-18-2025, 07:45 PM
RE: Dynamic Libraries (Windows) - by Steffan-68 - 12-18-2025, 08:31 PM
RE: Dynamic Libraries (Windows) - by Pete - 12-18-2025, 08:55 PM
RE: Dynamic Libraries (Windows) - by Steffan-68 - 12-18-2025, 09:48 PM
RE: Dynamic Libraries (Windows) - by Petr - 12-18-2025, 09:32 PM
RE: Dynamic Libraries (Windows) - by Pete - 12-18-2025, 11:53 PM
RE: Dynamic Libraries (Windows) - by Pete - 12-19-2025, 06:40 AM
RE: Dynamic Libraries (Windows) - by Petr - 12-19-2025, 03:08 PM
RE: Dynamic Libraries (Windows) - by Petr - 12-19-2025, 10:35 PM
RE: Dynamic Libraries (Windows) - by Petr - 12-19-2025, 10:54 PM
RE: Dynamic Libraries (Windows) - by Petr - 12-19-2025, 11:20 PM
RE: Dynamic Libraries (Windows) - by Pete - 12-19-2025, 11:37 PM
RE: Dynamic Libraries (Windows) - by Petr - 12-20-2025, 10:22 PM
RE: Dynamic Libraries (Windows) - by SMcNeill - 12-20-2025, 11:03 PM
RE: Dynamic Libraries (Windows) - by Petr - 12-21-2025, 05:40 PM
RE: Dynamic Libraries (Windows) - by Petr - 12-22-2025, 08:23 PM
RE: Dynamic Libraries (Windows) - by Petr - 12-23-2025, 09:06 AM
RE: Dynamic Libraries (Windows) - by Petr - 12-24-2025, 09:54 PM
RE: Dynamic Libraries (Windows) - by Petr - 12-25-2025, 10:02 AM
RE: Dynamic Libraries (Windows) - by Petr - 12-26-2025, 11:14 PM
RE: Dynamic Libraries (Windows) - by Petr - 12-27-2025, 01:35 PM
RE: Dynamic Libraries (Windows) - by MasterGy - 12-27-2025, 07:23 PM
RE: Dynamic Libraries (Windows) - by Petr - 01-07-2026, 06:31 PM
RE: Dynamic Libraries (Windows) - by Petr - 01-07-2026, 09:13 PM
RE: Dynamic Libraries (Windows) - by Petr - 02-24-2026, 06:38 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Dynamic Libraries (Linux) Petr 19 1,140 12-29-2025, 09:52 PM
Last Post: Petr

Forum Jump:


Users browsing this thread: 1 Guest(s)