Russian Qt Forum
Март 29, 2024, 02:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Увеличение времени работы при минимизации приложения  (Прочитано 13503 раз)
XimXim
Гость
« : Май 17, 2017, 10:51 »

Доброго времени суток, уважаемые участники форума!

Столкнулся с непонятной проблемой. А может и не проблемой вовсе. Имеется GUI-приложение. По нажатию на кнопку создаётся отдельный поток, в котором выполняется длительное действие. 

Вот примерный код того, как организуется запуск отдельного потока:
Код:
auto thread = new QThread;
myObj = new MyObject();
myObj->moveToThread(thread);

connect(myObj,SIGNAL(finished()),thread,SLOT(quit()));
connect(thread,SIGNAL(finished()),thread,SLOT(deleteLater()));
connect(thread,SIGNAL(started()),myObj,SLOT(start()));
thread->start();

Ничего необычного, всё стандартно.

А наблюдаю следующую картину: при минимизации (Minimize) приложения время работы операции в созданном потоке увеличивается, если приложение не "сворачивать", то приложение работает быстрее.
Не могу понять в чём дело. Возможно это связано с приоритетами потоков в системе и при "сворачивании" приложения приоритет потока понижается и ему отдаётся меньшее кол-во процессорного времени. Тогда почему другие программы в "свёрнутом" состоянии работают также быстро? Запускал какой-то инсталлятор и время его работы всегда было одинаковым.   

Кто-нибудь может подсказать в чем причина?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Май 17, 2017, 10:53 »

Чем занимается MyObject? Идет ли какая-то коммуникация с ГУИ из этого потока?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
XimXim
Гость
« Ответ #2 : Май 17, 2017, 11:45 »

Цитировать
Чем занимается MyObject?
MyObject декодирует большое кол-во файлов.

Цитировать
Идет ли какая-то коммуникация с ГУИ из этого потока?
Через сигнал MyObject сообщает статус операции.
Код:
connect(myObj,SIGNAL(operationStatus(QString)), ui->StatusLabel, SLOT(setText(QString)));


Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Май 17, 2017, 11:57 »

А не пробовал ли убрать этот коннект?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
XimXim
Гость
« Ответ #4 : Май 17, 2017, 11:59 »

Попробовал. Ситуация не изменилась.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Май 17, 2017, 12:46 »

А на сколько отличается время работы?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
XimXim
Гость
« Ответ #6 : Май 17, 2017, 12:53 »

В два раза
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Май 17, 2017, 13:22 »

Нехило. Кстати, под какой ОС это происходит? Не пробовал мониторить процесс на предмет загрузки процессора и памяти в обоих случаях?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
XimXim
Гость
« Ответ #8 : Май 18, 2017, 08:29 »

Загруженность процессора смотрел в processExplorer.
Как только "сворачивал" приложение, CPU Usage уменьшался с 2-3% до 0.3%. Когда восстанавливал, то использование процессора возвращалось на уровень 2-3%.
Запускаю всё это под Windows 7 x86. А вот под другой осью проверить не догадался почему-то. Надо попробовать. 
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Май 18, 2017, 09:23 »

Попробуй еще http://doc.qt.io/qt-5/qthread.html#setPriority - поднять приоритет нити. Возможно, при сворачивании Кьют понижает приоритет. Кстати, помню такую плюху - Кьют освобождал память при сворачивании окна под Виндой. Как сейчас не знаю.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
XimXim
Гость
« Ответ #10 : Май 18, 2017, 09:32 »

Первым делом вчера попробовал такую штуку. Так как было подозрение, что приоритет понижается.
Но увы. Устанавливал HighestPriority, затем запускал поток и в нём проверял его приоритет через QThread::currentThread()->priority(). Приоритет был такой какой я и выставил - HighestPriority, но работал медленно.
Записан
XimXim
Гость
« Ответ #11 : Май 18, 2017, 09:38 »

А ещё пробовал на других машинах/ОС запускать. Доступны были к сожалению только компьютеры с Win7, но разной разрядности.
На Win7 Professional x64 - работает нормально, Win7 Professional x86 - тоже всё замечательно. 

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Май 18, 2017, 10:00 »

К сожалению, я не знаю, что это может быть. Грустный Может, кто еще чем поможет. (я уже много лет под виндой не работаю и не деплоюсь).
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
XimXim
Гость
« Ответ #13 : Май 18, 2017, 10:03 »

Всё равно большое спасибо за помощь.
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Май 18, 2017, 11:09 »

Как только "сворачивал" приложение, CPU Usage уменьшался с 2-3% до 0.3%. Когда восстанавливал, то использование процессора возвращалось на уровень 2-3%.
Если разбираться, то сначала выяснить почему вообще такое низкое потребление 2-3% ? Чем запущенная нитка тогда занимается остальные 97% времени ?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 23.