mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
71 lines
1.1 KiB
C++
71 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
|