From 67d47d893bc582fbd06da8bd93a1c416fa314ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Vr=C3=A1til?= Date: Thu, 11 Dec 2014 11:07:04 +0100 Subject: Prototype of Async library --- async/src/async.cpp | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 async/src/async.cpp (limited to 'async/src/async.cpp') diff --git a/async/src/async.cpp b/async/src/async.cpp new file mode 100644 index 0000000..5c89e53 --- /dev/null +++ b/async/src/async.cpp @@ -0,0 +1,67 @@ +/* + * Copyright 2014 Daniel Vrátil + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "async.h" + +#include +#include +#include + + +using namespace Async; + +FutureBase::FutureBase() + : mFinished(false) + , mWaitLoop(nullptr) +{ + +} + +FutureBase::FutureBase(const Async::FutureBase &other) + : mFinished(other.mFinished) + , mWaitLoop(other.mWaitLoop) +{ +} + +void FutureBase::setFinished() +{ + mFinished = true; + if (mWaitLoop && mWaitLoop->isRunning()) { + mWaitLoop->quit(); + } +} + +bool FutureBase::isFinished() const +{ + return mFinished; +} + +void FutureBase::waitForFinished() +{ + if (mFinished) { + return; + } + + mWaitLoop = new QEventLoop; + mWaitLoop->exec(QEventLoop::ExcludeUserInputEvents); + delete mWaitLoop; + mWaitLoop = 0; +} -- cgit v1.2.3