DtkCore
DTK Core module
dutil.h
1// SPDX-FileCopyrightText: 2016 - 2022 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
5#pragma once
6
7#include <QTimer>
8#include <QThread>
9#include <QMetaObject>
10#include <QCoreApplication>
11
12namespace DUtil
13{
14
15template <typename Func1>
16inline void TimerSingleShot(int msec, Func1 slot)
17{
18#if QT_VERSION >= 0x050500
19 QTimer::singleShot(msec, slot);
20#else
21 QTimer *timer = new QTimer;
22 timer->setSingleShot(true);
23 timer->setInterval(msec);
24 timer->moveToThread(qApp->thread());
25 QObject::connect(timer, &QTimer::timeout, slot);
26 QObject::connect(timer, &QTimer::timeout, timer, &QTimer::deleteLater);
27 if (QThread::currentThread() == qApp->thread()) { timer->start(); }
28 else { QMetaObject::invokeMethod(timer, "start", Qt::QueuedConnection); }
29#endif
30}
31
32template <class T>
33void SecureErase(T *p, size_t size)
34{
35 memset(p, 0, size);
36}
37
38template <class T>
39void SecureErase(T &obj)
40{
41 for (typename T::iterator i = obj.begin(); i != obj.end(); ++i) {
42 *i = 0;
43 }
44 obj.clear();
45}
46
47}