#include "cpucount.h" #ifdef _WIN32 #include int cpucount() throw() { SYSTEM_INFO sysinfo = {0}; ::GetSystemInfo(&sysinfo); return sysinfo.dwNumberOfProcessors; } #endif #ifdef __APPLE_CC__ #import #import 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 int cpucount() throw() { return sysconf(_SC_NPROCESSORS_ONLN); } #endif #ifdef PLATFORM_BSD #include #include #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