142 explicit QEventDispatcherCoreFoundation(QObject *parent =
nullptr);
143 void startingUp() override;
144 ~QEventDispatcherCoreFoundation();
146 bool processEvents(QEventLoop::ProcessEventsFlags flags) override;
148 void registerSocketNotifier(QSocketNotifier *notifier) override;
149 void unregisterSocketNotifier(QSocketNotifier *notifier) override;
151 void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType,
152 QObject *object) override final;
153 bool unregisterTimer(Qt::TimerId timerId) override final;
154 bool unregisterTimers(QObject *object) override final;
155 QList<TimerInfoV2> timersForObject(QObject *object)
const override final;
156 Duration remainingTime(Qt::TimerId timerId)
const override final;
158 void wakeUp() override;
159 void interrupt() override;
162 QEventLoop *currentEventLoop()
const;
164 virtual bool processPostedEvents();
166 struct ProcessEventsState
168 ProcessEventsState(QEventLoop::ProcessEventsFlags f)
169 : flags(f.toInt()), wasInterrupted(
false)
170 , processedPostedEvents(
false), processedTimers(
false)
171 , deferredWakeUp(
false), deferredUpdateTimers(
false) {}
173 ProcessEventsState(
const ProcessEventsState &other)
174 : flags(other.flags.loadAcquire())
175 , wasInterrupted(other.wasInterrupted.loadAcquire())
176 , processedPostedEvents(other.processedPostedEvents.loadAcquire())
177 , processedTimers(other.processedTimers.loadAcquire())
178 , deferredWakeUp(other.deferredWakeUp.loadAcquire())
179 , deferredUpdateTimers(other.deferredUpdateTimers) {}
181 ProcessEventsState &operator=(
const ProcessEventsState &other)
183 flags.storeRelease(other.flags.loadAcquire());
184 wasInterrupted.storeRelease(other.wasInterrupted.loadAcquire());
185 processedPostedEvents.storeRelease(other.processedPostedEvents.loadAcquire());
186 processedTimers.storeRelease(other.processedTimers.loadAcquire());
187 deferredWakeUp.storeRelease(other.deferredWakeUp.loadAcquire());
188 deferredUpdateTimers = other.deferredUpdateTimers;
193 QAtomicInteger<
char> wasInterrupted;
194 QAtomicInteger<
char> processedPostedEvents;
195 QAtomicInteger<
char> processedTimers;
196 QAtomicInteger<
char> deferredWakeUp;
197 bool deferredUpdateTimers;
200 ProcessEventsState m_processEvents;
203 RunLoopSource<> m_postedEventsRunLoopSource;
204 RunLoopObserver<> m_runLoopActivityObserver;
206 QT_MANGLE_NAMESPACE(RunLoopModeTracker) *m_runLoopModeTracker;
208 QTimerInfoList m_timerInfoList;
209 CFRunLoopTimerRef m_runLoopTimer;
210 CFRunLoopTimerRef m_blockedRunLoopTimer;
211 QCFType<CFRunLoopRef> m_runLoop;
212 bool m_overdueTimerScheduled;
214 QCFSocketNotifier m_cfSocketNotifier;
216 void processTimers(CFRunLoopTimerRef);
218 void handleRunLoopActivity(CFRunLoopActivity activity);
221 void invalidateTimer();