[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