Реализация
idealThreadCount()
отличается в разных ОС:
В Windows QThread::idealThreadCount()
вызывает функцию Win32 GetNativeSystemInfo () и по ее результатам возвращает dwNumberOfProcessors
* значение из структуры SYSTEM_INFO
, которое вызывает.
В Linux (и большинстве других Unix-y ОС) QThread::idealThreadCount()
вызывает sysconf (_SC_NPROCESSORS_ONLN) и возвращает это значение.
В MacOS / X (и BSD и iOS) QThread::idealThreadCount()
вызывает sysctl (CTL_HW, HW_NCPU) и возвращает полученное оттуда значение.
QThread::idealThreadCount()
также содержит некоторые другие серверные реализации для менее часто используемых ОС, которые я не буду здесь резюмировать;если вам нужно искать себя, код находится в строках 461-515 из qtbase/src/corelib/thread/qthread_unix.cpp
.
Учитывая все вышесказанное, вопрос сводится к тому, почему OS-команда(что Qt вызывает до), возвращая 2 вместо более подходящего номера?Для меня это звучит как ошибка, хотя еще одна возможность состоит в том, что idealThreadCount()
возвращает правильное число, но ваш QSpinBox
почему-то ограничивает это число до 2.Если вы еще этого не сделали, я предлагаю распечатать значение, возвращаемое cpuInfo.idealThreadCount()
напрямую, в дополнение к передаче setValue()
, просто чтобы быть уверенным.