diff --git a/src/libCom/osi/os/WIN32/osdThread.c b/src/libCom/osi/os/WIN32/osdThread.c index 70b9b53d2..c88b0e689 100644 --- a/src/libCom/osi/os/WIN32/osdThread.c +++ b/src/libCom/osi/os/WIN32/osdThread.c @@ -1110,7 +1110,11 @@ epicsShareFunc void * epicsShareAPI epicsThreadPrivateGet ( epicsThreadPrivateId */ epicsShareFunc int epicsThreadGetCPUs ( void ) { - return atoi(getenv("NUMBER_OF_PROCESSORS")); + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + if (sysinfo.dwNumberOfProcessors > 0) + return sysinfo.dwNumberOfProcessors; + return 1; } #ifdef TEST_CODES diff --git a/src/libCom/osi/os/posix/osdThread.c b/src/libCom/osi/os/posix/osdThread.c index 00fbdc936..18cc0b67b 100644 --- a/src/libCom/osi/os/posix/osdThread.c +++ b/src/libCom/osi/os/posix/osdThread.c @@ -875,5 +875,16 @@ epicsShareFunc double epicsShareAPI epicsThreadSleepQuantum () epicsShareFunc int epicsThreadGetCPUs(void) { - return sysconf(_SC_NPROCESSORS_ONLN); + long ret; +#ifdef _SC_NPROCESSORS_ONLN + ret = sysconf(_SC_NPROCESSORS_ONLN); + if (ret > 0) + return ret; +#endif +#ifdef _SC_NPROCESSORS_CONF + ret = sysconf(_SC_NPROCESSORS_CONF); + if (ret > 0) + return ret; +#endif + return 1; } diff --git a/src/libCom/test/epicsThreadTest.cpp b/src/libCom/test/epicsThreadTest.cpp index b1e28bb8c..f80d3da7e 100644 --- a/src/libCom/test/epicsThreadTest.cpp +++ b/src/libCom/test/epicsThreadTest.cpp @@ -81,7 +81,11 @@ static void thread(void *arg) MAIN(epicsThreadTest) { - testPlan(8); + testPlan(9); + + unsigned int ncpus = epicsThreadGetCPUs(); + testDiag("System has %u CPUs", ncpus); + testOk1(ncpus > 0); const int ntasks = 3; myThread *myThreads[ntasks];