Quote:
Originally Posted by Masquerade
Is there a way to detect the amount of CPU threads / cores there are and do something accordingly?
Eg.
if CPU_THREADS = 6 then
begin
do_stuff
end else begin
do_other_stuff
end;
Asking because some multithreading tools crash when dealing with 6 or 12 threads.
|
Code:
function GetSysCores(): Integer;
var
WbemLocator, WbemServices, WbemObjectSet, WbemObject: Variant;
begin;
WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
WbemServices := WbemLocator.ConnectServer('localhost', 'root\CIMV2');
WbemObjectSet := WbemServices.ExecQuery('Select NumberOfCores from Win32_Processor');
WbemObject := WbemObjectSet.ItemIndex(0);
Result := WbemObject.Properties_.Item('NumberOfCores').Value;
WbemLocator:=Unassigned;
WbemServices:=Unassigned;
WbemObjectSet:=Unassigned;
WbemObject:=Unassigned;
end;
function GetSysThreads(): Integer;
var
WbemLocator, WbemServices, WbemObjectSet, WbemObject: Variant;
begin;
WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
WbemServices := WbemLocator.ConnectServer('localhost', 'root\CIMV2');
WbemObjectSet := WbemServices.ExecQuery('Select NumberOfLogicalProcessors from Win32_Processor');
WbemObject := WbemObjectSet.ItemIndex(0);
Result := WbemObject.Properties_.Item('NumberOfLogicalProcessors').Value;
WbemLocator:=Unassigned;
WbemServices:=Unassigned;
WbemObjectSet:=Unassigned;
WbemObject:=Unassigned;
end;