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

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

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

Сообщений: 4350



Просмотр профиля
« Ответ #15 : Сентябрь 24, 2014, 12:56 »

А так, например большая проблема QtConcurrentRun, что не остановишь его человеческим способом, когда потребуется.
Все останавливается точно так же как и с отдельным потоком, через флажочек. Улыбающийся
Записан
OKTA
Гость
« Ответ #16 : Сентябрь 24, 2014, 13:14 »

Флажочек да, без него никуда. Но лично меня большое количество QtConcurrent настораживает и пугает. Превращается в какой-то зоопарк, за которым тяжко следить и тем более разбираться в коде.  Улыбающийся Про случай, когда надо мильён одинаковых функций вызвать в отдельных потоках я не говорю.
В общем, субъективно это все  Смеющийся
Записан
Nidxogg
Гость
« Ответ #17 : Сентябрь 24, 2014, 18:07 »

С processEvents()  решил проблему
Оказалось, случайно, не в тот цикл его вставил (с малым число итераций)


Цитировать
Если планируется расширение в дальнейшем, то вынеси весь класс работы с БД в отдельный поток и не мучайся, а то так или processEvents везде распихивать или QtConcurrent::run постоянно дергать, если появятся новые тяжелые функции.
Так изначально и планировалось, но не пошло по некоторым причинам.

Цитировать
QtConcurrent::run(myMethod) - не ?
Мне его иногда приходится вызывать чаще, чем он успевает отработать.
Разве что создать какую-то очередь на обработку или мьютексами обложить

Цитировать
вызывать руками процессевентс - это самому себе грабли раскидывать
?
« Последнее редактирование: Сентябрь 24, 2014, 18:17 от Nidxogg » Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #18 : Сентябрь 25, 2014, 09:20 »


Цитировать
вызывать руками процессевентс - это самому себе грабли раскидывать
?

если обработчики сигналов не реентерабельны - будут проблемы
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #19 : Сентябрь 25, 2014, 10:43 »

если обработчики сигналов не реентерабельны - будут проблемы
Возможно имелось ввиду что processEvents разрешает др события/сигналы которые могут изменить контекст расчета, а то и вовсе удалить используемые в расчете данные. Да, от этого надо страховаться (часто модальностью) - но это так же и в др случаях.
..то вынеси весь класс работы с БД в отдельный поток и не мучайся, а то так или processEvents везде распихивать
И что изменит этот вынос? События-то все равно разрешены, теперь потому что главная нитка свободна. И все равно надо знать "а что же там с расчетом", поэтому что-то пихать в него все равно надо.
Записан
OKTA
Гость
« Ответ #20 : Сентябрь 25, 2014, 10:54 »

Да, пихать надо, но с возрастанием количества разнообразных расчетов и обращений к бд, будет все сложнее держать это в одном классе и тем более следить за этим барахлом, запускаемым через QtConcurrent.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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