Проблема потока Qt с одноядерным процессором в Windows XP - PullRequest
0 голосов
/ 28 августа 2011

Я разрабатываю кроссплатформенный фрактальный исследователь с использованием Qt.У меня проблема с производительностью, особенно при работе на одноядерном процессоре под Windows XP (программа, скомпилированная с MSVC Express 2010), я не пробовал другие версии Windows.С двумя ядрами программа работает нормально.Он также прекрасно работает под Linux с одним или двумя ядрами (скомпилированными с GCC).

Проблема производительности связана с вызовом слота в виджете через сигнал в потоке вычислений.Виджет содержит QImage, и я передаю указатель на его пиксели в поток вычислений.Поток вычисляет фрактал и строит пиксели к изображению.В конце каждой строки поток посылает виджету сигнал, чтобы он обновлял отображение в основном потоке.Насколько я понимаю, это соединение с очередями.

В Windows и с одним процессором обновление происходит очень медленно, намного медленнее, чем расчет.Это делает программу непригодной для использования.

Соответствующий код похож на пример Мандельброта в документации Qt, за исключением того, что у моего сигнала нет аргументов, потому что Qimage находится в виджете, а не в потоке, и я не конвертирую QImageна QPixmap.

Есть ли у кого-нибудь какие-либо идеи о том, что может быть проблема и как идти к ее решению?Это как-то связано с планированием, распределением времени?Есть ли в MSVC флаг компилятора, который мне нужно установить?Или мне нужно как-то изменить мою программу?

Большое спасибо!

1 Ответ

0 голосов
/ 29 августа 2011

Вы говорите, что обновление медленнее, чем расчет - насколько медленнее? Вы выполнили какое-либо комплексное профилирование, чтобы увидеть, где именно возникает узкое место? Краткий гугл находит этот профилировщик , который может вам помочь.

Помните, что для старых процессоров переключение контекста потока очень дорого. Это может быть частью вашей проблемы, хотя, опять же, я не знаю особенностей.

...