JS8Call-Improved master
Loading...
Searching...
No Matches
DriftingDateTime.h
1#ifndef DRIFTINGDATETIME_H
2#define DRIFTINGDATETIME_H
3
4#include "TwoPhaseSignal.h"
5
6#include <QDateTime>
7#include <QMutex>
8#include <QPointer>
9
43class DriftingDateTimeSingleton : public TwoPhaseSignal {
44 Q_OBJECT
45
46 private:
47 // As this is a subclass of QObject,
48 // it lives in a thread: Whatever thread
49 // first called getSingleton().
50 DriftingDateTimeSingleton();
51 qint64 driftMS;
52 mutable QMutex mutex;
53
54 static QPointer<DriftingDateTimeSingleton> singleton;
55
56 private:
60 void setDriftInner(qint64 ms);
61
62 public:
66 static DriftingDateTimeSingleton &getSingleton();
67
74 qint64 drift() const;
75
77 inline QDateTime currentDateTimeUtc() const {
78 return QDateTime::currentDateTimeUtc().addMSecs(drift());
79 }
80
82 inline QDateTime currentDateTimeLocal() const {
83 return QDateTime::currentDateTime().addMSecs(drift());
84 }
85
87 inline qint64 currentMSecsSinceEpoch() const {
88 return QDateTime::currentMSecsSinceEpoch() + drift();
89 }
90
99 inline qint64 currentSecsSinceEpoch() const {
100 return currentMSecsSinceEpoch() / 1000;
101 }
102
103 public slots:
105 void setDrift(qint64 ms);
107 void onPlumbingCompleted() const;
108
109 signals:
117 void driftChanged(qint64 new_drift) const;
118};
119
122inline qint64 drift() {
124}
125
132inline void setDrift(qint64 ms) {
134}
135
136inline QDateTime currentDateTimeUtc() {
138}
139
140inline QDateTime currentDateTimeLocal() {
142}
143
144inline qint64 currentMSecsSinceEpoch() {
146}
147
148inline qint64 currentSecsSinceEpoch() {
150}
151}; // namespace DriftingDateTime
152
153#endif // DRIFTINGDATETIME_H
QDateTime currentDateTimeLocal() const
Definition DriftingDateTime.h:82
void driftChanged(qint64 new_drift) const
void onPlumbingCompleted() const
Emits to the driftChanged signal (as per TwoPhaseSignal contract).
Definition DriftingDateTime.cpp:79
void setDrift(qint64 ms)
Set the drift.
Definition DriftingDateTime.cpp:61
QDateTime currentDateTimeUtc() const
Definition DriftingDateTime.h:77
qint64 drift() const
Retrieve drift, in milliseconds.
Definition DriftingDateTime.cpp:41
static DriftingDateTimeSingleton & getSingleton()
Get the singleton instance.
Definition DriftingDateTime.cpp:19
qint64 currentSecsSinceEpoch() const
Definition DriftingDateTime.h:99
qint64 currentMSecsSinceEpoch() const
Definition DriftingDateTime.h:87
TwoPhaseSignal()
This is a humble helper class for Qt signals and slots when this mechanism is also used to initialize...
Definition TwoPhaseSignal.cpp:11
Definition DriftingDateTime.h:121
void setDrift(qint64 ms)
Definition DriftingDateTime.h:132