AsyncTask: Centralize setting global future synchronizer

Move the global FutureSynchronizer to Utils and use it
by default for AsyncTask (if that is in the main thread).
This way setting a synchronizer is less prone to be forgotten.
Individual uses can still override this.

Change-Id: I1a12bf4d7f4cb5be99668bf0a4797108c2fe6448
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
Eike Ziller
2024-05-16 09:29:51 +02:00
parent 3cd72806f8
commit c676ec825f
28 changed files with 31 additions and 78 deletions

View File

@@ -3,6 +3,9 @@
#include "futuresynchronizer.h"
#include "qtcassert.h"
#include "threadutils.h"
/*!
\class Utils::FutureSynchronizer
\inmodule QtCreator
@@ -62,4 +65,18 @@ void FutureSynchronizer::flushFinishedFutures()
m_futures = newFutures;
}
Q_GLOBAL_STATIC(FutureSynchronizer, s_futureSynchronizer);
/*!
Returns a global FutureSynchronizer.
The application should cancel and wait for the tasks in this synchronizer before actually
unloading any libraries. This is for example done by the plugin manager in Qt Creator.
May only be accessed by the main thread.
*/
FutureSynchronizer *futureSynchronizer()
{
QTC_ASSERT(isMainThread(), return nullptr);
return s_futureSynchronizer;
}
} // namespace Utils