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

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

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: Новичкам про потоки  (Прочитано 42801 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #30 : Январь 12, 2017, 10:49 »

Спасибо. С пулами не работал. Надо попробовать.
Да проще сразу QtConcurrent использовать. Он базируется на пуле и более высокого уровня.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #31 : Январь 12, 2017, 12:04 »

С этим зверем знаком)))

Хотел бы ещё обсудить такую вещь. При использовании потоков как антифриз для морды, каким образом лучше реализовывать отображение прогресса?
Сейчас я использую примерно следующее: передаю указатель на структуру, где хранится наименование операции, текущий процент выполнения. Диалог прогресса с частотой 100 мс опрашивает эту структуру, а решатель ведёт в неё запись. Интуитивно чувствую, что не самый лучший вариант. Есть предложения?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #32 : Январь 12, 2017, 12:15 »

Я сигналом реализовывал.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #33 : Январь 12, 2017, 12:22 »

При использовании сигнала приходится реализовывать ветвление if. Кажется, это будет добавлять дополнительную нагрузку на решатель
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #34 : Январь 12, 2017, 12:24 »

Какое ветвление?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #35 : Январь 12, 2017, 12:26 »

Код
C++ (Qt)
if (current / total != progressValue){
   emit ...
}
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #36 : Январь 12, 2017, 12:31 »

Да это ерунда вычислить. А код можно обобщить в классе

Код
C++ (Qt)
class Progress
{
public:
 Progress (quint64 total);
 void setValue (quint64 value);
 
signals:
 void progress (int);
};
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #37 : Январь 12, 2017, 13:26 »

А сам прогресс где создаёшь при этом и как с ним взаимодействуют морда и солвер?
У меня, кстати, солвер несколько последовательных операций имеет, прогресс которых хотелось бы отображать.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #38 : Январь 12, 2017, 13:29 »

Тут как захочешь, так и делай, вариантов вагон и пару тележек.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #39 : Январь 12, 2017, 16:00 »

Хотел бы ещё обсудить такую вещь. При использовании потоков как антифриз для морды, каким образом лучше реализовывать отображение прогресса?
Сейчас я использую примерно следующее: передаю указатель на структуру, где хранится наименование операции, текущий процент выполнения. Диалог прогресса с частотой 100 мс опрашивает эту структуру, а решатель ведёт в неё запись. Интуитивно чувствую, что не самый лучший вариант. Есть предложения?
По таймеру с какой-то частотой нормально, только счетчик(и) обновляемые рабочими нитками делать атомарными (напр QAtomicInt)
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #40 : Январь 12, 2017, 16:03 »

Не, в моём случае не страшно их делать не атомарными. Запись делает 1 поток, чтение другой. Не важно, если на момент отображения реальный прогресс убежит вперёд.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #41 : Январь 12, 2017, 16:05 »

Concurrent умеет о прогрессе уведомлять через QFutureWatcher
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #42 : Январь 12, 2017, 16:08 »

Не, в моём случае не страшно их делать не атомарными. Запись делает 1 поток, чтение другой. Не важно, если на момент отображения реальный прогресс убежит вперёд.
Там atomic нужен чтоб значение счётчика не похерилось, в ситуации одновременного чтения и записи)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #43 : Январь 12, 2017, 17:00 »

Не, в моём случае не страшно их делать не атомарными. Запись делает 1 поток, чтение другой. Не важно, если на момент отображения реальный прогресс убежит вперёд.
Ну если там аж одна нитка считает и UI свободно - то как угодно, не грех и на сигнал потратиться. Проблемы с индикатором возникают когда задача/кластер соразмерим с обновлением или когда главная тоже считает. 
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #44 : Январь 12, 2017, 17:24 »

m_ax, что значит похерилось, не совсем понимаю, оно может как-то испортиться? Если я в ячейку, где хранится 5 пишу 6 и одновременно считываю эту же ячейку, то при считывании получу или 5 или 6, в моём понимании.
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


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