winamp/Src/Plugins/DSP/sc_serv3/cpucount.cpp
2024-09-24 14:54:57 +02:00

70 lines
1.1 KiB
C++

#include "cpucount.h"
#ifdef _WIN32
#include <windows.h>
int cpucount() throw()
{
SYSTEM_INFO sysinfo = {0};
::GetSystemInfo(&sysinfo);
return sysinfo.dwNumberOfProcessors;
}
#endif
#ifdef __APPLE_CC__
#import <sys/param.h>
#import <sys/sysctl.h>
int cpucount() throw()
{
int count = 0;
size_t size = sizeof(count);
if (sysctlbyname("hw.ncpu",&count,&size,NULL,0)) return 1;
return count;
}
#endif
#if (defined PLATFORM_LINUX || defined PLATFORM_ARMv6 || defined PLATFORM_ARMv7)
#include <unistd.h>
int cpucount() throw()
{
return sysconf(_SC_NPROCESSORS_ONLN);
}
#endif
#ifdef PLATFORM_BSD
#include <sys/param.h>
#include <sys/sysctl.h>
#ifndef HW_AVAILCPU
#define HW_AVAILCPU 25
#endif
int cpucount() throw()
{
int numCPU = 1;
int mib[4] = {0};
size_t len = 0;
/* set the mib for hw.ncpu */
mib[0] = CTL_HW;
mib[1] = HW_AVAILCPU; // alternatively, try HW_NCPU;
/* get the number of CPUs from the system */
sysctl(mib, 2, &numCPU, &len, NULL, 0);
if( numCPU < 1 )
{
mib[1] = HW_NCPU;
sysctl( mib, 2, &numCPU, &len, NULL, 0 );
if( numCPU < 1 )
{
numCPU = 1;
}
}
return numCPU;
}
#endif