186void QBasicTimer::start(Duration duration, Qt::TimerType timerType, QObject *obj)
188 if (duration < 0ns) {
189 qWarning(
"QBasicTimer::start: negative intervals aren't allowed; the "
190 "interval will be set to 1ms.");
194 QThreadData *currentData = QThreadData::current();
195 if (Q_UNLIKELY(obj && QObjectPrivate::get(obj)->threadData != currentData)) {
196 qWarning(
"QBasicTimer::start: Timers cannot be started from another thread");
200 QAbstractEventDispatcher *eventDispatcher = currentData->eventDispatcher.loadRelaxed();
201 if (Q_UNLIKELY(!eventDispatcher)) {
202 qWarning(
"QBasicTimer::start: current thread's event dispatcher has already been destroyed");
207 m_id = eventDispatcher->registerTimer(duration, timerType, obj);
215void QBasicTimer::stop()
218 QAbstractEventDispatcher *eventDispatcher =
nullptr;
221 if (QThreadData *data = QThreadData::currentThreadData())
222 eventDispatcher = data->eventDispatcher.loadRelaxed();
224 if (eventDispatcher && !eventDispatcher->unregisterTimer(m_id)) {
225 qWarning(
"QBasicTimer::stop: Failed. Possibly trying to stop from a different thread");
228 QAbstractEventDispatcherPrivate::releaseTimerId(m_id);
230 m_id = Qt::TimerId::Invalid;