Russian Qt Forum
Ноябрь 25, 2024, 13:37
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Останавливается таймер
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Останавливается таймер (Прочитано 6003 раз)
jurtal
Гость
Останавливается таймер
«
:
Ноябрь 25, 2011, 13:20 »
Всем привет. Столкнулся со следующей проблемой:
В какой-то момент запущенный таймер останавливается (QTimer).
Частота срабатываний 10мсек, не синглшот.
После каких-то манипуляций на формочке (слайдер пошевелить или еще чего ) обработчик сигналов от таймера перестает срабатывать.
Причина непонятна.
Если у кого есть идеи - почему такое может быть - пожалуйста поделитесь..
Записан
Bepec
Гость
Re: Останавливается таймер
«
Ответ #1 :
Ноябрь 25, 2011, 13:21 »
Код. Формочки и таймера. Желательно полный.
Записан
jurtal
Гость
Re: Останавливается таймер
«
Ответ #2 :
Ноябрь 25, 2011, 13:29 »
Код к сожалению не получится - очень большое приложение. Чисто теоретически есть идеи по какой причине он может останавливаться?
Записан
Bepec
Гость
Re: Останавливается таймер
«
Ответ #3 :
Ноябрь 25, 2011, 13:37 »
Диавольские баги отняли у меня шлем СУПЕР-телепата к сожалению.
По теме:
Чисто теоретически может блокироваться форма и перестает реагировать на данный сигнал.
Чисто функционально таймер в какой то момент может просто удаляться.
Чисто распростроняясь обработчик таймера у вас начит неправильный
Чисто по человечески - вырезать кусок создания таймера и слот на его срабатывания очень сложная операция... Прям как сердце вырезать человеку. Однако это необходимо чтобы вылечить вашу программу.
Смысл поста - вырезать кусок создания таймера и слот на его срабатывания и выложить.
Записан
jurtal
Гость
Re: Останавливается таймер
«
Ответ #4 :
Ноябрь 25, 2011, 13:54 »
Да не - вырезать нетрудно...
Однако очень маленькая вероятность, что это может вылечить мою программу.
У меня происходит в 4.7.1 нечто подобное...
https://bugreports.qt.nokia.com/browse/QTBUG-11642?page=com.atlassian.streams.streams-jira-plugin:activity-stream-issue-tab
// Создание
....
m_timerSlow = new QTimer(this);
if(m_timerSlow != NULL)
{
connect(m_timerSlow, SIGNAL(timeout()), this, SLOT(onTimerSlow()));
}
......
//
void Manager::timerSlowStart(int interval)
{
if((m_timerSlow != NULL) && (interval > 0))
{
m_timerSlow->start(interval);
}
}
//
void Manager::timerSlowStop()
{
if(m_timerSlow != NULL)
{
m_timerSlow->stop();
}
}
//
void Manager::onTimerSlow()
{
updateAll();
}
Записан
Bepec
Гость
Re: Останавливается таймер
«
Ответ #5 :
Ноябрь 25, 2011, 14:04 »
Страшно мне смотреть на сие. Каждый раз проверяться на наличие таймера, это ммм... осторожен ты однако, или программа у тебя без проекта
Да и странно, НО твоя проверка не работает
вообще никак.
Она проверяет наличие у тебя указателя, а не присутствия в указателе ссылки.
(Хотел у тебя стырить эту проверку на наличие, но увы, она нерабочая, а то бы пригодилась.)
Вкратце - ты проверяешь, есть ли у тебя указатель.
Не видя текста программы, я могу сказать лишь одно - тебе нужно ее перерабатывать.
Записан
jurtal
Гость
Re: Останавливается таймер
«
Ответ #6 :
Ноябрь 25, 2011, 14:23 »
Один тоже умный человек сказал нечто подобное много лет назад.... У тебя ошибка - и я знаю что делать... Тебе нужно ее исправить...
Записан
Bepec
Гость
Re: Останавливается таймер
«
Ответ #7 :
Ноябрь 25, 2011, 14:38 »
ну. скажем так - указатель у тебя ведь является полем класса?
Объявлен в private:/public: где то? Объявлен глобальной переменной?
И все твои условия которые я видел - всегда будут выдавать true.
PS увидев такую проверку я сразу же в своей программе наподобие сотворил только с указателем на поток
И убедился в бесполезности проверки.
Записан
jurtal
Гость
Re: Останавливается таймер
«
Ответ #8 :
Ноябрь 25, 2011, 14:48 »
Согласен. Ты прав. Вот только проблема таймера здесь непричем. Похоже это баг Qt. Я не вижу причин для внезапной остановки таймера... Нашел описание того, что происходит у меня.
https://bugreports.qt.nokia.com/browse/QTBUG-11642?page=com.atlassian.streams.streams-jira-plugin:activity-stream-issue-tab
В любом случае спасибо за комментарии и помощь.
Записан
Bepec
Гость
Re: Останавливается таймер
«
Ответ #9 :
Ноябрь 25, 2011, 14:52 »
А вот тут ты неправ ) Там же ясно написано что глюк имеет место быть только с OpenGl компонентой
PS сам решай, стоит ли пытаться решить проблему, или махнуть рукой. (я лично с таймерами норм лажу пока что );
Записан
andrew.k
Гость
Re: Останавливается таймер
«
Ответ #10 :
Ноябрь 25, 2011, 16:19 »
Цитата: Bepec от Ноябрь 25, 2011, 14:04
Страшно мне смотреть на сие. Каждый раз проверяться на наличие таймера, это ммм... осторожен ты однако, или программа у тебя без проекта
Да и странно, НО твоя проверка не работает
вообще никак.
Она проверяет наличие у тебя указателя, а не присутствия в указателе ссылки.
(Хотел у тебя стырить эту проверку на наличие, но увы, она нерабочая, а то бы пригодилась.)
Вкратце - ты проверяешь, есть ли у тебя указатель.
Не видя текста программы, я могу сказать лишь одно - тебе нужно ее перерабатывать.
Что такое
шизофазия
?
Записан
andrew.k
Гость
Re: Останавливается таймер
«
Ответ #11 :
Ноябрь 25, 2011, 16:21 »
Цитата: Bepec от Ноябрь 25, 2011, 14:38
PS увидев такую проверку я сразу же в своей программе наподобие сотворил только с указателем на поток
И убедился в бесполезности проверки.
Я тут накидал для тебя набор правил)
Правило №1: Всегда инициализируй переменные!
Правило №2: Если ты не знаешь зачем это нужно, просто следуй правилу один.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Останавливается таймер
«
Ответ #12 :
Ноябрь 25, 2011, 17:11 »
Что делает updateAll() и каково значение interval?
Записан
Qt 5.11/4.8.7 (X11/Win)
andrew.k
Гость
Re: Останавливается таймер
«
Ответ #13 :
Ноябрь 25, 2011, 17:27 »
If Qt is unable to deliver the requested number of timer clicks, it will silently discard some.
О. как.
А если увеличить интервал до 50мс?
Если с таким интервалом все хорошо работает, то очевидно, что в коде все в порядке.
Записан
Bepec
Гость
Re: Останавливается таймер
«
Ответ #14 :
Ноябрь 28, 2011, 07:01 »
andrew.k Шизофазия не имеет ко мне отношения
там же написано фразы без смысла должны быть.
По поводу советов - в программе использующей n+1 потоков, возможны аварийные ситуации, и соответственно нужна проверка на наличие указателя на поток.
PS спустись с небес на землю и не суди всех как бог.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...