Я разрабатываю большой инструмент оптимизации с использованием Qt. Для лучшего использования процессора я использую QThreads. Затем я перемещаю объекты-работники (полученные из QObject, содержащие члены данных вне QObject) в потоки. Все выглядит отлично, строит отлично и работает плавно в Linux с использованием GCC и Qt 4.8QThreads с использованием MinGw не работает должным образом под окнами
Однако, используя MinGw, используя Qt 5.5 под Windows, расчет занял гораздо больше времени. Похоже, что потоки блокируются где-то в расчете и сериализуются. Я отобрал некоторые отладочные сообщения, чтобы убедиться, что потоки работают правильно. Похоже, что есть бутылочка, которая существует в Windows, но не под Linux. Я не думаю, что версия Qt имеет значение, я бы предпочел, чтобы проблема была вызвана MinGw. ОС - это Windows 7 и Debian. Я использую скомпилированные бинарные файлы MinGw Qt5.
Есть ли дополнительная конфигурация для сборки Qt MinGw? Или есть проблема с использованием элементов non QObject при перемещении рабочих объектов в потоки? Может ли это быть проблемой с разными типами потоков, QThread использует внутренне? Заранее спасибо :-)
EDIT:
Отправной О.Б. темы выглядит следующим образом.
for (int i = 0; i < this->numberOfCores; i++)
{
QThread *thread = new QThread(this);
thread->setObjectName("Thread " + QString::number(i));
Calculator *calculator = new Calculator(/* Skip parameters */);
calculator->moveToThread(thread);
connect(calculator, SIGNAL(debugInfo(DebugData)), this, SIGNAL(debugInfo(DebugData)));
connect(this, SIGNAL(startCalculator()),
calculator, SLOT(startCalculation()));
connect(calculator, SIGNAL(solutionFound(Solution*)),
this, SLOT(addSolution(Solution*)));
connect(calculator, SIGNAL(calculationFinished()), this, SLOT(calculatorFinished()));
thread->start(QThread::HighestPriority);
Я использовал этот подход несколько раз, и он всегда работал.
Калькулятор затем просто вычисляет решение. Каждый калькулятор имеет свои собственные данные, и не может быть состояния гонки. Все они работают над совершенно разными данными.
Возможно, проблема связана с вашим кодом, который не отображается. – dtech
Вы работаете на одной машине, только в другой ОС? – thuga
@thuga Та же физическая машина просто виртуальная машина с Debian – Liachtei