Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qohoseventdispatcher.cpp
Go to the documentation of this file.
1
// Copyright (C) 2025 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#
include
"qohoseventdispatcher.h"
5
#
include
"qohosjsmain.h"
6
#
include
"qohosdeadlockprotector.h"
7
8
QOhosEventDispatcher::QOhosEventDispatcher(QObject *parent) :
9
QUnixEventDispatcherQPA(parent)
10
{
11
if
(QtOhos::blockEventLoopsWhenSuspended())
12
QOhosEventDispatcherStopper::instance()->addEventDispatcher(
this
);
13
}
14
15
QOhosEventDispatcher
::~
QOhosEventDispatcher
()
16
{
17
if
(
QtOhos
::
blockEventLoopsWhenSuspended
(
)
)
18
QOhosEventDispatcherStopper
::
instance
(
)
->
removeEventDispatcher
(
this
)
;
19
}
20
21
enum
States
{
Running
= 0,
StopRequest
= 1,
Stopping
= 2};
22
23
void
QOhosEventDispatcher
::
start
()
24
{
25
int
prevState = m_stopRequest.fetchAndStoreAcquire(Running);
26
if
(prevState ==
Stopping
) {
27
m_semaphore.release();
28
wakeUp();
29
}
else
if
(prevState ==
Running
) {
30
qWarning(
"Error: start without corresponding stop"
);
31
}
32
//else if prevState == StopRequest, no action needed
33
}
34
35
void
QOhosEventDispatcher
::
stop
()
36
{
37
if
(m_stopRequest.testAndSetAcquire(Running, StopRequest))
38
wakeUp();
39
else
40
qWarning(
"Error: start/stop out of sync"
);
41
}
42
43
void
QOhosEventDispatcher
::
goingToStop
(
bool
stop)
44
{
45
m_goingToStop.storeRelaxed(stop);
46
if
(!stop)
47
wakeUp();
48
}
49
50
bool
QOhosEventDispatcher
::
processEvents
(QEventLoop::ProcessEventsFlags flags)
51
{
52
if
(m_goingToStop.loadRelaxed())
53
flags |= QEventLoop::ExcludeSocketNotifiers | QEventLoop::X11ExcludeTimers;
54
55
{
56
QOhosDeadlockProtector protector;
57
if
(protector.acquire() && m_stopRequest.testAndSetAcquire(StopRequest, Stopping)) {
58
m_semaphore.acquire();
59
wakeUp();
60
}
61
}
62
63
return
QUnixEventDispatcherQPA::processEvents(flags);
64
}
65
66
QOhosEventDispatcherStopper
*
QOhosEventDispatcherStopper
::
instance
()
67
{
68
static
QOhosEventDispatcherStopper
ohosEventDispatcherStopper;
69
return
&ohosEventDispatcherStopper;
70
}
71
72
void
QOhosEventDispatcherStopper
::
startAll
()
73
{
74
QMutexLocker lock(&m_mutex);
75
if
(!m_started.testAndSetOrdered(0, 1))
76
return
;
77
78
for
(QOhosEventDispatcher *d : std::as_const(m_dispatchers))
79
d->start();
80
}
81
82
void
QOhosEventDispatcherStopper
::
stopAll
()
83
{
84
QMutexLocker lock(&m_mutex);
85
if
(!m_started.testAndSetOrdered(1, 0))
86
return
;
87
88
for
(QOhosEventDispatcher *d : std::as_const(m_dispatchers))
89
d->stop();
90
}
91
92
void
QOhosEventDispatcherStopper
::
addEventDispatcher
(
QOhosEventDispatcher
*dispatcher)
93
{
94
QMutexLocker lock(&m_mutex);
95
m_dispatchers.push_back(dispatcher);
96
}
97
98
void
QOhosEventDispatcherStopper
::
removeEventDispatcher
(
QOhosEventDispatcher
*dispatcher)
99
{
100
QMutexLocker lock(&m_mutex);
101
m_dispatchers.erase(std::find(m_dispatchers.begin(), m_dispatchers.end(), dispatcher));
102
}
103
104
void
QOhosEventDispatcherStopper
::
goingToStop
(
bool
stop)
105
{
106
QMutexLocker lock(&m_mutex);
107
for
(QOhosEventDispatcher *d : std::as_const(m_dispatchers))
108
d->goingToStop(stop);
109
}
QOhosEventDispatcherStopper
Definition
qohoseventdispatcher.h:33
QOhosEventDispatcherStopper::startAll
void startAll()
Definition
qohoseventdispatcher.cpp:72
QOhosEventDispatcherStopper::instance
static QOhosEventDispatcherStopper * instance()
Definition
qohoseventdispatcher.cpp:66
QOhosEventDispatcherStopper::stopAll
void stopAll()
Definition
qohoseventdispatcher.cpp:82
QOhosEventDispatcherStopper::goingToStop
void goingToStop(bool stop)
Definition
qohoseventdispatcher.cpp:104
QOhosEventDispatcherStopper::addEventDispatcher
void addEventDispatcher(QOhosEventDispatcher *dispatcher)
Definition
qohoseventdispatcher.cpp:92
QOhosEventDispatcherStopper::removeEventDispatcher
void removeEventDispatcher(QOhosEventDispatcher *dispatcher)
Definition
qohoseventdispatcher.cpp:98
QOhosEventDispatcher
Definition
qohoseventdispatcher.h:13
QOhosEventDispatcher::~QOhosEventDispatcher
~QOhosEventDispatcher()
Definition
qohoseventdispatcher.cpp:15
QOhosEventDispatcher::stop
void stop()
Definition
qohoseventdispatcher.cpp:35
QOhosEventDispatcher::processEvents
bool processEvents(QEventLoop::ProcessEventsFlags flags) override
Processes pending events that match flags until there are no more events to process.
Definition
qohoseventdispatcher.cpp:50
QOhosEventDispatcher::goingToStop
void goingToStop(bool stop)
Definition
qohoseventdispatcher.cpp:43
QOhosEventDispatcher::start
void start()
Definition
qohoseventdispatcher.cpp:23
QtOhos
Definition
qcore_ohos.cpp:59
QtOhos::blockEventLoopsWhenSuspended
bool blockEventLoopsWhenSuspended()
Definition
qohosjsmain.cpp:1778
States
States
Definition
qandroideventdispatcher.cpp:23
StopRequest
@ StopRequest
Definition
qandroideventdispatcher.cpp:23
Stopping
@ Stopping
Definition
qandroideventdispatcher.cpp:23
Running
@ Running
Definition
qandroideventdispatcher.cpp:23
qtbase
src
plugins
platforms
ohos
qohoseventdispatcher.cpp
Generated on
for Qt by
1.18.0