summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qeventloop.h
blob: ec79c07cd738f4ec48526cb0bb56d0740bec4875 (plain)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
// Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef QEVENTLOOP_H#define QEVENTLOOP_H#include <QtCore/qobject.h>#include <QtCore/qdeadlinetimer.h> QT_BEGIN_NAMESPACE class QEventLoopLocker;class QEventLoopPrivate;class Q_CORE_EXPORT QEventLoop :public QObject { Q_OBJECT Q_DECLARE_PRIVATE(QEventLoop)friend class QEventLoopLocker;public:explicitQEventLoop(QObject *parent =nullptr);~QEventLoop();enum ProcessEventsFlag { AllEvents =0x00, ExcludeUserInputEvents =0x01, ExcludeSocketNotifiers =0x02, WaitForMoreEvents =0x04, X11ExcludeTimers =0x08, EventLoopExec =0x20, DialogExec =0x40, ApplicationExec =0x80,};Q_DECLARE_FLAGS(ProcessEventsFlags, ProcessEventsFlag)Q_FLAG(ProcessEventsFlags)boolprocessEvents(ProcessEventsFlags flags = AllEvents);voidprocessEvents(ProcessEventsFlags flags,int maximumTime);voidprocessEvents(ProcessEventsFlags flags, QDeadlineTimer deadline);intexec(ProcessEventsFlags flags = AllEvents);boolisRunning()const;voidwakeUp();boolevent(QEvent *event) override;public Q_SLOTS:voidexit(int returnCode =0);voidquit();};Q_DECLARE_OPERATORS_FOR_FLAGS(QEventLoop::ProcessEventsFlags)class QEventLoopLockerPrivate;class QEventLoopLocker {public: Q_NODISCARD_CTOR Q_CORE_EXPORT QEventLoopLocker() noexcept; Q_NODISCARD_CTOR Q_CORE_EXPORT explicitQEventLoopLocker(QEventLoop *loop) noexcept; Q_NODISCARD_CTOR Q_CORE_EXPORT explicitQEventLoopLocker(QThread *thread) noexcept; Q_CORE_EXPORT ~QEventLoopLocker(); Q_NODISCARD_CTOR QEventLoopLocker(QEventLoopLocker &&other) noexcept : p{std::exchange(other.p,0)} {}QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QEventLoopLocker)voidswap(QEventLoopLocker &other) noexcept {std::swap(p, other.p); }friendvoidswap(QEventLoopLocker &lhs, QEventLoopLocker &rhs) noexcept { lhs.swap(rhs); }private:Q_DISABLE_COPY(QEventLoopLocker)friend class QEventLoopLockerPrivate;//// Private implementation details.// Do not call from public inline API!//enumclass Type : quintptr { EventLoop, Thread, Application,};explicitQEventLoopLocker(void*ptr, Type t) noexcept; quintptr p;staticconstexpr quintptr TypeMask =0x3; Type type()const{returnType(p & TypeMask); }void*pointer()const{return reinterpret_cast<void*>(p & ~TypeMask); }template<typename Func>voidvisit(Func func)const;}; QT_END_NAMESPACE #endif// QEVENTLOOP_H
close