diff --git a/modules/juce_events/messages/juce_MessageManager.cpp b/modules/juce_events/messages/juce_MessageManager.cpp index 1383f90f97..cfaf8cfa83 100644 --- a/modules/juce_events/messages/juce_MessageManager.cpp +++ b/modules/juce_events/messages/juce_MessageManager.cpp @@ -131,6 +131,22 @@ void MessageManager::stopDispatchLoop() #endif //============================================================================== +struct AsyncFunction : private MessageManager::MessageBase +{ + AsyncFunction (std::function f) : fn (f) { post(); } + +private: + std::function fn; + void messageCallback() override { fn(); } + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AsyncFunction) +}; + +void MessageManager::callAsync (std::function f) +{ + new AsyncFunction (f); +} + class AsyncFunctionCallback : public MessageManager::MessageBase { public: diff --git a/modules/juce_events/messages/juce_MessageManager.h b/modules/juce_events/messages/juce_MessageManager.h index 9266d05034..bd91977c8c 100644 --- a/modules/juce_events/messages/juce_MessageManager.h +++ b/modules/juce_events/messages/juce_MessageManager.h @@ -91,6 +91,11 @@ public: #endif //============================================================================== + /** Asynchronously invokes a function or C++11 lambda on the message thread. + Internally this uses the CallbackMessage class to invoke the callback. + */ + static void callAsync (std::function); + /** Calls a function using the message-thread. This can be used by any thread to cause this function to be called-back