BSD cpucount was Re: [fpc-devel] Feature announcement: Extension of TThread's interface
Marco van de Voort
marcov at stack.nl
Thu Dec 27 21:17:39 CET 2012
In our previous episode, Sven Barth said:
> - ProcessorCount (class):
> Returns the count of CPU cores detected by the RTL. This is based
> on the new global property System.GetCPUCount which needs to be
> implemented per target. Currently only a default implementation exists
> which returns "1".
Here is some BSD code. I don't know what it returns, physical or virtual
cores since the machine I developed it with has no physical ones.
The hw.* mib might vary slightly with the BSD flavour. The pchar casts are
probably due to a bug in the FPC sysctl unit.
uses baseunix,sysctl,ctypes;
var mib : array[0..3] of cint;
len : cint;
numcpu:cint;
begin
len:= sizeof(numCPU);
{ set the mib for hw.ncpu }
mib[0] := CTL_HW;
mib[1] := HW_NCPU; // alternatively, try HW_AVAILCPU;
{ get the number of CPUs from the system }
fpsysctl(pchar(@mib), 2, @numCPU, @len, NIL, 0);
if( numCPU < 1 ) then
begin
mib[1] := HW_NCPU;
fpsysctl( pchar(@mib), 2, @numCPU, @len, NIL, 0 );
if( numCPU < 1 ) then
begin
numCPU := 1;
end;
end;
writeln(numCPU);
end.
More information about the fpc-devel
mailing list