crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> а обработка событий виджетов однопоточна?
kuler
  опции профиля:
сообщение 24.10.2008, 14:05
Сообщение #1


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

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




Репутация:   -1  


а то сделал окно с прогресс баром, чтобы когда чтото грузится его показывать, а там прогресс бар не обновляется пока все не прогрузится, а затем уже начинает обновляться

примерный код

new qwidget
show

dataprocess

delete widget

врубил в виджете таймер, а он тоже не срабатывает (вот это вообще нонсенс)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sploid
  опции профиля:
сообщение 24.10.2008, 15:11
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 51
Регистрация: 26.2.2008
Из: Москва
Пользователь №: 106

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




Репутация:   1  


в цикле обработки данных вызывай:
void QCoreApplication::processEvents ( QEventLoop::ProcessEventsFlags flags, int maxtime ) [static]

а то что нет таймера так и должно быть, ты же не обрабатываешь сообщения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.10.2008, 15:32
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


kuler, обработка GUI событий происходит в главном потоке. Из псевдо кода не понятно как ты собирался управлять индикатором выполнения.

в длительных циклах всегда надо вставлять такие вещи как показал sploid
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 24.10.2008, 15:43
Сообщение #4


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

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




Репутация:   -1  


sploid,
как это не обрабатываю? обработчик таймера есть и он начинает срабатывать сразу после тормоза
Litkevich Yuriy,
там нет цикла, а есть вызов одного метода который тормозит

вообще то да, в билдере тоже не срабатывает пока не завершится тормоз

__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  /*B* b = new B;
  IB* ib = (IB*)b;
  b->met1();*/
  t->Enabled = true;

}
//---------------------------------------------------------------------------
не сработает в следующий раз пока не завершится а()
void __fastcall TForm1::tTimer(TObject *Sender)
{
a();
}
//---------------------------------------------------------------------------
void a()
{
        int c = 1;
  for (int i = 0; i < 2000; i++)
  for (int j = 0; j < 1000000; j++)
    c++;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.10.2008, 15:59
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(kuler @ 24.10.2008, 19:43) *
там нет цикла, а есть вызов одного метода который тормозит
посути одно и тоже, длительный процесс.

Я на эту грблю не разу не наступал, т.к. прочитал про нее в книжке немногим раньше, чем начал маломальски сложные программы на Дельфи-3 писать, а книжка была очень хорошая, правда забыл как называлась, помню, что про Дельфи-2
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 24.10.2008, 16:33
Сообщение #6


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

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




Репутация:   -1  


Цитата(Litkevich Yuriy @ 24.10.2008, 16:59) *
Цитата(kuler @ 24.10.2008, 19:43) *
там нет цикла, а есть вызов одного метода который тормозит
посути одно и тоже, длительный процесс.

Я на эту грблю не разу не наступал, т.к. прочитал про нее в книжке немногим раньше, чем начал маломальски сложные программы на Дельфи-3 писать, а книжка была очень хорошая, правда забыл как называлась, помню, что про Дельфи-2

имхо, правильней сказать что не сталкивались, ибо этот метод не мной написан, а вызывать нада, да и не должно быть в нормальном методе всякого лишнего мусора типа updatecomponent (во всяком случае в случае если неизвестно сколько будет длиться процесс)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sploid
  опции профиля:
сообщение 24.10.2008, 21:23
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 51
Регистрация: 26.2.2008
Из: Москва
Пользователь №: 106

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




Репутация:   1  


kuler что бы гуйня не тормозила, "длинные" методы вызываются в отдельном потоке.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 27.10.2008, 10:42
Сообщение #8


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

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




Репутация:   -1  


Цитата(sploid @ 24.10.2008, 22:23) *
"длинные" методы вызываются в отдельном потоке

в курсе, но это геморройно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 15:29