Qt
6.x
The Qt SDK
Loading...
Searching...
No Matches
btgcdtimer.mm
Go to the documentation of this file.
1
// Copyright (C) 2022 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 "
btgcdtimer_p.h
"
5
#include "
btutility_p.h
"
6
7
#include <QtCore/qelapsedtimer.h>
8
#include <QtCore/qdebug.h>
9
10
#include <algorithm>
11
12
QT_USE_NAMESPACE
13
using namespace
DarwinBluetooth
;
14
15
@implementation
DarwinBTGCDTimer
{
16
@private
17
qint64
timeoutMS
;
18
qint64
timeoutStepMS
;
19
20
// Optional:
21
id
objectUnderWatch
;
22
OperationTimeout
timeoutType
;
23
24
QElapsedTimer
timer
;
25
id
<
QT_MANGLE_NAMESPACE
(GCDTimerDelegate)>
timeoutHandler
;
26
27
bool
cancelled
;
28
}
29
30
- (instancetype)initWithDelegate:(
id
<
QT_MANGLE_NAMESPACE
(GCDTimerDelegate)>)delegate
31
{
32
if
(
self
= [super
init
]) {
33
timeoutHandler
= delegate;
34
timeoutMS
= 0;
35
timeoutStepMS
= 0;
36
objectUnderWatch
= nil;
37
timeoutType
= OperationTimeout::none;
38
cancelled
=
false
;
39
}
40
return
self
;
41
}
42
43
- (
void
)watchAfter:(
id
)object withTimeoutType:(
OperationTimeout
)type
44
{
45
objectUnderWatch
=
object
;
46
timeoutType
=
type
;
47
}
48
49
- (
void
)startWithTimeout:(
qint64
)ms step:(
qint64
)stepMS
50
{
51
Q_ASSERT
(!
timeoutMS
&& !
timeoutStepMS
);
52
Q_ASSERT
(!
cancelled
);
53
54
if
(!
timeoutHandler
) {
55
// Nobody to report timeout to, no need to start any task then.
56
return
;
57
}
58
59
if
(ms <= 0 || stepMS <= 0) {
60
qCWarning
(QT_BT_DARWIN,
"Invalid timeout/step parameters"
);
61
return
;
62
}
63
64
timeoutMS
= ms;
65
timeoutStepMS
= stepMS;
66
timer
.
start
();
67
68
[
self
handleTimeout];
69
}
70
71
- (
void
)handleTimeout
72
{
73
if
(
cancelled
)
74
return
;
75
76
const
qint64
elapsed
=
timer
.
elapsed
();
77
if
(
elapsed
>=
timeoutMS
) {
78
[timeoutHandler timeout:self];
79
}
else
{
80
// Re-schedule:
81
dispatch_queue_t leQueue(
qt_LE_queue
());
82
Q_ASSERT
(leQueue);
83
const
qint64
timeChunkMS = std::min(
timeoutMS
-
elapsed
,
timeoutStepMS
);
84
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
85
int64_t(timeChunkMS / 1000. * NSEC_PER_SEC)),
86
leQueue,
87
^{
88
[
self
handleTimeout];
89
});
90
}
91
}
92
93
- (
void
)cancelTimer
94
{
95
cancelled
=
true
;
96
timeoutHandler
= nil;
97
objectUnderWatch
= nil;
98
timeoutType
= OperationTimeout::none;
99
}
100
101
- (
id
)
objectUnderWatch
102
{
103
return
objectUnderWatch
;
104
}
105
106
- (
OperationTimeout
)
timeoutType
107
{
108
return
timeoutType
;
109
}
110
111
@end
timeoutMS
qint64 timeoutMS
Definition
btcentralmanager.mm:143
objectUnderWatch
id objectUnderWatch
Definition
btgcdtimer.mm:21
timeoutType
OperationTimeout timeoutType
Definition
btgcdtimer.mm:22
timeoutHandler
id< QT_MANGLE_NAMESPACE(GCDTimerDelegate)> timeoutHandler
Definition
btgcdtimer.mm:25
timer
QElapsedTimer timer
Definition
btgcdtimer.mm:24
cancelled
bool cancelled
Definition
btgcdtimer.mm:27
timeoutStepMS
qint64 timeoutStepMS
Definition
btgcdtimer.mm:18
btgcdtimer_p.h
btutility_p.h
DarwinBTGCDTimer
Definition
btgcdtimer.mm:15
QElapsedTimer
\inmodule QtCore
Definition
qelapsedtimer.h:14
QElapsedTimer::elapsed
qint64 elapsed() const noexcept
Returns the number of milliseconds since this QElapsedTimer was last started.
Definition
qelapsedtimer.cpp:299
QElapsedTimer::start
void start() noexcept
Starts this timer.
Definition
qelapsedtimer.cpp:214
DarwinBluetooth
Definition
btcentralmanager.mm:22
DarwinBluetooth::OperationTimeout
OperationTimeout
Definition
btgcdtimer_p.h:31
DarwinBluetooth::qt_LE_queue
dispatch_queue_t qt_LE_queue()
Definition
btutility.mm:324
QT_USE_NAMESPACE
Definition
avfmediaassetwriter.mm:18
language::self
QString self
Definition
language.cpp:57
void
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
Definition
qdbus_symbols_p.h:401
qCWarning
#define qCWarning(category,...)
Definition
qloggingcategory.h:125
id
GLenum GLuint id
[7]
Definition
qopengles2ext.h:151
object
GLuint object
[3]
Definition
qopengles2ext.h:1248
type
GLenum type
Definition
qopengles2ext.h:150
Q_ASSERT
#define Q_ASSERT(cond)
Definition
qrandom.cpp:47
elapsed
static double elapsed(qint64 after, qint64 before)
Definition
qtconcurrentiteratekernel.cpp:23
QT_MANGLE_NAMESPACE
#define QT_MANGLE_NAMESPACE(name)
Definition
qtconfigmacros.h:89
init
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
Definition
qtextboundaryfinder.cpp:10
qint64
long long qint64
Definition
qtypes.h:55
timer
QTimer * timer
[3]
Definition
src_corelib_kernel_qobject.cpp:23
qtconnectivity
src
bluetooth
darwin
btgcdtimer.mm
Generated by
1.9.7