Russian Qt Forum

Qt => Общие вопросы => Тема начата: burkav от Август 29, 2006, 23:12



Название: Обработка сигналов из потока
Отправлено: burkav от Август 29, 2006, 23:12
Есть класс унаследованный от QThread - каждые 200 миллисекунд из run() он шлет signal с данными. Главный поток визуализирует эти данные. Примерно через 15-20 мин главный поток начинает обрабатывать эти сигналы "рывками" - тоесть если сначала интерфейс обновляется стабильно каждые 200 мс, то со временем наступают тормоза. Мне кажется забивается очередь событий, но пробовал qApp->ProcessEvents() - не помогает. Может кто сталкивался - подскажите.

Qt-4.1.4-x11 / SuSE Linux 9.3


Название: Обработка сигналов из потока
Отправлено: Asaphus_Expansus от Август 29, 2006, 23:30
А память в обработчике сигналов не течет? Сколько памяти на старте приложение берет и сколько имеет через 20 минут? Так, буквально на всякий случай...


Название: Обработка сигналов из потока
Отправлено: Admin от Август 30, 2006, 00:41
или еще вариант
если не успевают визуализироватся, то просто пропускать кадры


Название: Обработка сигналов из потока
Отправлено: burkav от Август 30, 2006, 11:02
Цитата: "Asaphus_Expansus"
А память в обработчике сигналов не течет? Сколько памяти на старте приложение берет и сколько имеет через 20 минут? Так, буквально на всякий случай...


Память не течет - точно. Проверял даже таким образом. В слоте (в гуевом потоке) ставлю одну единственную функцию label->setText(QTime::currentTime().toString("hh:mm:ss:zzz")) - таже самая фигня.

добавлено спустя 2 минуты:

 
Цитата: "Admin"
или еще вариант
если не успевают визуализироватся, то просто пропускать кадры


Тут возникает вопрос: как узнать что не успевает визуализироваться и как пропускать кадры ?


Название: Обработка сигналов из потока
Отправлено: Admin от Август 30, 2006, 12:18
самый простой спосов флагом

типа
if(!bDraw){
   bDraw=true;

   //draw procedure

   bDraw=false;
}


Название: Обработка сигналов из потока
Отправлено: burkav от Август 30, 2006, 18:23
Цитата: "Admin"
самый простой спосов флагом

типа
if(!bDraw){
   bDraw=true;

   //draw procedure

   bDraw=false;
}


А что-нибудь не "простое" можете посоветовать ? :-)