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 +#include + +// 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 +static void QueueOnObject(QObject* obj, F&& func) +{ + QObject src; + QObject::connect(&src, &QObject::destroyed, obj, std::forward(func), Qt::QueuedConnection); +}