crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Переполнение буфера или ...
sidsukana
  опции профиля:
сообщение 12.1.2011, 18:31
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Здравствуйте. Есть такая проблема.
Есть объект - интерфейс, есть объект поиска. При нажатии кнопки поиск, происходит создание потока, и в потоке создается объект поиска.
Поиск - формирует QStandardItemModel и применяет его на QTableView в объект интерфейса посредством ивентов. (забыл сказать, что вынесено все в поток изза того что формируется модель 10000+ строк и 2 столбца, поиск ведется по одному символу из другого бинарного файла (ну это не важно так как сам поиск в цикле проходит быстро) Так вот, при первом запуске программы, первый поиск проходит реактивно и буквально за секунду табличка сформирована и результат есть в вьювере. Но стоит запустить снова такой же поиск как интерфейс зависает и все работает как будто без потоков и ивентов(блок интерфейса на 5-10 секунд и тд.)

Самое интересное что поток проходит успешно и завершается. А зависание происходит после выполнения потока.
Прошу помощи :) Может какое переполнение буфера при составлении огромной модели?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xls
  опции профиля:
сообщение 13.1.2011, 12:37
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 6.9.2010
Пользователь №: 2013

Спасибо сказали: 7 раз(а)




Репутация:   2  


Вопрос : передаете ли вы сформированную в доппотоке модель в основной поток ( moveToThread) ?. Если нет, то это надо делать.
Проблема может быть в том, что при присвоении новой модели QTableView он пытается удалить предыдущую модель и время уходит на это.
В этом случае можно сделать так: отсоединить старую модель от QTableView , назначить новую , послать старую в другой поток и вызвать ее метод deleteLater().
Более точную инфу может показать только вскрытие ) (исходного кода).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 13.1.2011, 13:32
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Нет не использовал. Т.е при создании потока в конструкторе вызывать moveToThread(this) ? А как из этого потока допустим отсылать данные в основной не через ивент? И можете подсказать, что это за метод отсоединения модели от вьювера? :) Я что-то не нашел)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 14.1.2011, 1:09
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


https://bitbucket.org/sidsukana/qsw жду помощи :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 14.1.2011, 16:18
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Опять я прослакал :) В конструкторе давным давно остался сигнал ресайза строк по контенту, что очень сильно подвешивает приложение) Убрал и все стало летать)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 5.10.2022, 12:09