QDnsLookup: replace Q_GLOBAL_STATIC with Q_APPLICATION_STATIC
Replaces a lot of the manual content. Change-Id: I3e3bfef633af4130a03afffd175e839f4b05975c Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
9a4eb45df1
commit
f5b584022b
@ -5,6 +5,7 @@
|
|||||||
#include "qdnslookup.h"
|
#include "qdnslookup.h"
|
||||||
#include "qdnslookup_p.h"
|
#include "qdnslookup_p.h"
|
||||||
|
|
||||||
|
#include <qapplicationstatic.h>
|
||||||
#include <qcoreapplication.h>
|
#include <qcoreapplication.h>
|
||||||
#include <qdatetime.h>
|
#include <qdatetime.h>
|
||||||
#include <qrandom.h>
|
#include <qrandom.h>
|
||||||
@ -14,7 +15,18 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
Q_GLOBAL_STATIC(QDnsLookupThreadPool, theDnsLookupThreadPool);
|
namespace {
|
||||||
|
struct QDnsLookupThreadPool : QThreadPool
|
||||||
|
{
|
||||||
|
QDnsLookupThreadPool()
|
||||||
|
{
|
||||||
|
// Run up to 5 lookups in parallel.
|
||||||
|
setMaxThreadCount(5);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_APPLICATION_STATIC(QDnsLookupThreadPool, theDnsLookupThreadPool);
|
||||||
|
|
||||||
static bool qt_qdnsmailexchangerecord_less_than(const QDnsMailExchangeRecord &r1, const QDnsMailExchangeRecord &r2)
|
static bool qt_qdnsmailexchangerecord_less_than(const QDnsMailExchangeRecord &r1, const QDnsMailExchangeRecord &r2)
|
||||||
{
|
{
|
||||||
@ -531,6 +543,11 @@ void QDnsLookup::lookup()
|
|||||||
Q_D(QDnsLookup);
|
Q_D(QDnsLookup);
|
||||||
d->isFinished = false;
|
d->isFinished = false;
|
||||||
d->reply = QDnsLookupReply();
|
d->reply = QDnsLookupReply();
|
||||||
|
if (!QCoreApplication::instance()) {
|
||||||
|
qWarning("QDnsLookup requires a QCoreApplication");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto l = [this](const QDnsLookupReply &reply) {
|
auto l = [this](const QDnsLookupReply &reply) {
|
||||||
Q_D(QDnsLookup);
|
Q_D(QDnsLookup);
|
||||||
if (d->runnable == sender()) {
|
if (d->runnable == sender()) {
|
||||||
@ -1056,42 +1073,6 @@ void QDnsLookupRunnable::run()
|
|||||||
emit finished(reply);
|
emit finished(reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
QDnsLookupThreadPool::QDnsLookupThreadPool()
|
|
||||||
: signalsConnected(false)
|
|
||||||
{
|
|
||||||
// Run up to 5 lookups in parallel.
|
|
||||||
setMaxThreadCount(5);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QDnsLookupThreadPool::start(QRunnable *runnable)
|
|
||||||
{
|
|
||||||
// Ensure threads complete at application destruction.
|
|
||||||
if (!signalsConnected) {
|
|
||||||
QMutexLocker signalsLocker(&signalsMutex);
|
|
||||||
if (!signalsConnected) {
|
|
||||||
QCoreApplication *app = QCoreApplication::instance();
|
|
||||||
if (!app) {
|
|
||||||
qWarning("QDnsLookup requires a QCoreApplication");
|
|
||||||
delete runnable;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
moveToThread(app->thread());
|
|
||||||
connect(app, SIGNAL(destroyed()),
|
|
||||||
SLOT(_q_applicationDestroyed()), Qt::DirectConnection);
|
|
||||||
signalsConnected = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QThreadPool::start(runnable);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QDnsLookupThreadPool::_q_applicationDestroyed()
|
|
||||||
{
|
|
||||||
waitForDone();
|
|
||||||
signalsConnected = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#include "moc_qdnslookup.cpp"
|
#include "moc_qdnslookup.cpp"
|
||||||
|
@ -181,22 +181,6 @@ private:
|
|||||||
quint16 port;
|
quint16 port;
|
||||||
};
|
};
|
||||||
|
|
||||||
class QDnsLookupThreadPool : public QThreadPool
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
QDnsLookupThreadPool();
|
|
||||||
void start(QRunnable *runnable);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void _q_applicationDestroyed();
|
|
||||||
|
|
||||||
private:
|
|
||||||
QMutex signalsMutex;
|
|
||||||
bool signalsConnected;
|
|
||||||
};
|
|
||||||
|
|
||||||
class QDnsRecordPrivate : public QSharedData
|
class QDnsRecordPrivate : public QSharedData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user