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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QObject::killTimer()  (Прочитано 3084 раз)
Akon
Гость
« : Январь 26, 2012, 09:37 »

Нет возможности сейчас выяснить: QObject::killTimer() удаляет таймерные события из очереди или нет? (насколько помню - удаляет)
Спасибо.
Записан
interv
Гость
« Ответ #1 : Январь 26, 2012, 15:11 »

что пишет хелп

Kills the timer with timer identifier, id.
The timer identifier is returned by startTimer() when a timer event is started.

наверное удаляет, но только по id
Записан
KrupaKarlo
Гость
« Ответ #2 : Январь 30, 2012, 15:44 »

Вот код Qt по удалению таймера

Код:
void QObject::killTimer(int id)
{
    Q_D(QObject);
    if (d->threadData->eventDispatcher)
        d->threadData->eventDispatcher->unregisterTimer(id);
}

А вот функция приватного диспачера для винды
Код:
void QEventDispatcherWin32Private::unregisterTimer(WinTimerInfo *t, bool closingDown)
{
    // mark timer as unused
    if (!QObjectPrivate::get(t->obj)->inThreadChangeEvent && !closingDown)
        QAbstractEventDispatcherPrivate::releaseTimerId(t->timerId);

    if (t->interval == 0) {
        QCoreApplicationPrivate::removePostedTimerEvent(t->dispatcher, t->timerId);
    } else if (t->fastTimerId != 0) {
        qtimeKillEvent(t->fastTimerId);
        QCoreApplicationPrivate::removePostedTimerEvent(t->dispatcher, t->timerId);
    } else if (internalHwnd) {
        KillTimer(internalHwnd, t->timerId);
    }
    delete t;
}
Думаю строчки
Код:
  QCoreApplicationPrivate::removePostedTimerEvent(t->dispatcher, t->timerId);

говорят сами за себя. Все ивенты должны удалятся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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