[fpc-pascal] number of cpu cores

Dariusz Mazur darekm at emadar.com
Sat Nov 29 18:47:41 CET 2008


Mattias Gaertner pisze:
> I need a default value of the number of maximum threads.
> Is there already some RTL function that can be used for that?
>
> For example if the program runs on a 2 x quad core it would be nice to
> get 8.
> Hyperthreading multipliers should be applied.
>
>
>   
I've found something on:
http://blogs.msdn.com/oldnewthing/archive/2005/12/16/504659.aspx

function AvailableProcessorCount: DWORD;
//returns total number of processors available to system including 
logical hyperthreaded processors
var
i: Integer;
ProcessAffinityMask, SystemAffinityMask: DWORD;
Mask: DWORD;
begin
if GetProcessAffinityMask(GetCurrentProcess, ProcessAffinityMask, 
SystemAffinityMask) then begin
Result := 0;
for i := 0 to 31 do begin
Mask := 1 shl i;
if (ProcessAffinityMask and Mask)<>0 then begin
inc(Result);
end;
end;
end else begin
//can't get the affinity mask so we just report the total number of 
processors
Result := OperatingSystemInfo.ProcessorCount;
end;
end; (* AvailableProcessorCount *)

-- 
  Darek







More information about the fpc-pascal mailing list