diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-09-17 08:32:43 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-09-17 08:32:43 +0200 |
commit | d49d076431d7579ecb33147187fe07eb148112ba (patch) | |
tree | 668370fb9a2eec50000e371125136921ef4518ab /src/corelib/kernel/qeventdispatcher_winrt.cpp | |
parent | b01e69684b9b36492cc43472edeb72058be9f706 (diff) | |
parent | 35cdcddd605d8823b7b57129e8d7279133a3ca89 (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: Ic1fd51143f903b7e9086fc19ca960dfd9654ee00
Diffstat (limited to 'src/corelib/kernel/qeventdispatcher_winrt.cpp')
-rw-r--r-- | src/corelib/kernel/qeventdispatcher_winrt.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/corelib/kernel/qeventdispatcher_winrt.cpp b/src/corelib/kernel/qeventdispatcher_winrt.cpp index 600c6c38fd..f7a1f969a8 100644 --- a/src/corelib/kernel/qeventdispatcher_winrt.cpp +++ b/src/corelib/kernel/qeventdispatcher_winrt.cpp @@ -44,12 +44,13 @@ #include <QtCore/QHash> #include <QtCore/QMutex> #include <QtCore/QSemaphore> -#include <QtCore/QSharedPointer> #include <QtCore/qfunctions_winrt.h> #include <private/qabstracteventdispatcher_p.h> #include <private/qcoreapplication_p.h> #include <functional> +#include <memory> + #include <wrl.h> #include <windows.foundation.h> #include <windows.system.threading.h> @@ -300,19 +301,19 @@ HRESULT QEventDispatcherWinRT::runOnMainThread(const std::function<HRESULT()> &d if (QThread::currentThread() == QCoreApplication::instance()->thread()) return delegate(); - auto semaphore = QSharedPointer<QSemaphore>(new QSemaphore); - auto ptrSemaphore = new QSharedPointer<QSemaphore>(semaphore); - auto result = QSharedPointer<HRESULT>(new HRESULT); - auto ptrResult = new QSharedPointer<HRESULT>(result); + struct State { + QSemaphore semaphore; + HRESULT result; + }; + + const auto state = std::make_shared<State>(); - QMetaObject::invokeMethod(QCoreApplication::instance(), [delegate, ptrSemaphore, ptrResult]() { - **ptrResult = delegate(); - delete ptrResult; - (*ptrSemaphore)->release(); - delete ptrSemaphore; + QMetaObject::invokeMethod(QCoreApplication::instance(), [delegate, state]() { + const QSemaphoreReleaser releaser{state->semaphore}; + state->result = delegate(); }, nullptr); - return semaphore->tryAcquire(1, timeout) ? *result : E_FAIL; + return state->semaphore.tryAcquire(1, timeout) ? state->result : E_FAIL; } bool QEventDispatcherWinRT::processEvents(QEventLoop::ProcessEventsFlags flags) |