From 3ecd69e0c5025bc973433d1f67b474ae3543dc2a Mon Sep 17 00:00:00 2001 From: xtemp09 Date: Tue, 7 Mar 2023 15:23:02 +0700 Subject: [PATCH] [FEM] Replacement of hardware_concurrency() with idealThreadCount() I encountered problems with std::thread::hardware_concurrency() with mingw-w64 < v8.1. QThread::idealThreadCount() is a better alternative. --- src/Mod/Fem/Gui/DlgSettingsFemCcxImp.cpp | 8 +++----- src/Mod/Fem/Gui/DlgSettingsFemElmerImp.cpp | 13 ++++--------- src/Mod/Fem/Gui/DlgSettingsFemElmerImp.h | 2 +- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/Mod/Fem/Gui/DlgSettingsFemCcxImp.cpp b/src/Mod/Fem/Gui/DlgSettingsFemCcxImp.cpp index 68ed8742cc..74e7a443ec 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemCcxImp.cpp +++ b/src/Mod/Fem/Gui/DlgSettingsFemCcxImp.cpp @@ -25,7 +25,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include +# include # include #endif @@ -46,10 +46,8 @@ DlgSettingsFemCcxImp::DlgSettingsFemCcxImp(QWidget* parent) ui->dsb_ccx_analysis_time->setMaximum(FLOAT_MAX); ui->dsb_ccx_initial_time_step->setMaximum(FLOAT_MAX); // determine number of CPU cores - auto processor_count = std::thread::hardware_concurrency(); - // hardware check might fail and then returns 0 - if (processor_count > 0) - ui->sb_ccx_numcpu->setMaximum(processor_count); + int processor_count = QThread::idealThreadCount(); + ui->sb_ccx_numcpu->setMaximum(processor_count); connect(ui->fc_ccx_binary_path, &Gui::PrefFileChooser::fileNameChanged, this, &DlgSettingsFemCcxImp::onfileNameChanged); diff --git a/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.cpp b/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.cpp index 201bbe3f24..20126e56b2 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.cpp +++ b/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.cpp @@ -24,7 +24,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include +# include # include #endif @@ -41,10 +41,8 @@ DlgSettingsFemElmerImp::DlgSettingsFemElmerImp(QWidget* parent) ui->setupUi(this); // determine number of CPU cores - processor_count = std::thread::hardware_concurrency(); - // hardware check might fail and then returns 0 - if (processor_count > 0) - ui->sb_elmer_num_cores->setMaximum(processor_count); + processor_count = QThread::idealThreadCount(); + ui->sb_elmer_num_cores->setMaximum(processor_count); connect(ui->fc_grid_binary_path, &Gui::PrefFileChooser::fileNameChanged, this, &DlgSettingsFemElmerImp::onfileNameChanged); @@ -109,10 +107,7 @@ void DlgSettingsFemElmerImp::onfileNameChanged(QString FileName) void DlgSettingsFemElmerImp::onfileNameChangedMT(QString FileName) { - // reset in case it was previously set to 1 - // (hardware check might fail and then returns 0) - if (processor_count > 0) - ui->sb_elmer_num_cores->setMaximum(processor_count); + ui->sb_elmer_num_cores->setMaximum(processor_count); if (ui->sb_elmer_num_cores->value() == 1) return; diff --git a/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.h b/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.h index e42b65e82b..ed089d3ffe 100644 --- a/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.h +++ b/src/Mod/Fem/Gui/DlgSettingsFemElmerImp.h @@ -51,7 +51,7 @@ protected: private: std::unique_ptr ui; - unsigned int processor_count; + int processor_count; }; } // namespace FemGui