From 734c9e1459d50358118bac5585ba4035c1318679 Mon Sep 17 00:00:00 2001 From: Michael M <mchtly@gmail.com> Date: Sat, 1 Jul 2017 13:14:10 -0700 Subject: [PATCH] QtUtils: add QueueOnObject --- .../Core/DolphinQt2/QtUtils/QueueOnObject.h | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Source/Core/DolphinQt2/QtUtils/QueueOnObject.h diff --git a/Source/Core/DolphinQt2/QtUtils/QueueOnObject.h b/Source/Core/DolphinQt2/QtUtils/QueueOnObject.h new file mode 100644 index 0000000000..6110bccb79 --- /dev/null +++ b/Source/Core/DolphinQt2/QtUtils/QueueOnObject.h @@ -0,0 +1,20 @@ +// Copyright 2017 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include <QObject> +#include <utility> + +// QWidget and subclasses are not thread-safe! However, Qt's signal-slot connection mechanism will +// invoke slots/functions on the correct thread for any object. We can (ab)use this to queue up +// arbitrary code from non-GUI threads. For more information, see: +// https://stackoverflow.com/questions/21646467/ + +template <typename F> +static void QueueOnObject(QObject* obj, F&& func) +{ + QObject src; + QObject::connect(&src, &QObject::destroyed, obj, std::forward<F>(func), Qt::QueuedConnection); +}