Russian Qt Forum

Qt => Общие вопросы => Тема начата: Akon от Январь 26, 2012, 09:37



Название: QObject::killTimer()
Отправлено: Akon от Январь 26, 2012, 09:37
Нет возможности сейчас выяснить: QObject::killTimer() удаляет таймерные события из очереди или нет? (насколько помню - удаляет)
Спасибо.


Название: Re: QObject::killTimer()
Отправлено: interv от Январь 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


Название: Re: QObject::killTimer()
Отправлено: KrupaKarlo от Январь 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);

говорят сами за себя. Все ивенты должны удалятся