Really? In Win32 case:
//==============================================================================
bool MessageManager::callFunctionOnMessageThreadAsynchronously (MessageCallbackFunction* callback,
void* userData)
{
if (MessageManager::getInstance()->isThisTheMessageThread())
{
// Don't care about return value in this case
(void)(*callback) (userData);
return true;
}
else
{
// No deadlock probs here...
return (PostMessage (juce_messageWindowHandle,
specialCallbackId,
(WPARAM) callback,
(LPARAM) userData) != 0);
}
}
No allocations needed. Probably analogous for Mac/Linux case. My earlier post is edited to match this proposal.