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