|
|
|
@@ -66,12 +66,17 @@ void MessageManager::deleteInstance() |
|
|
|
}
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
void MessageManager::MessageBase::post()
|
|
|
|
bool MessageManager::MessageBase::post()
|
|
|
|
{
|
|
|
|
MessageManager* const mm = MessageManager::instance;
|
|
|
|
|
|
|
|
if (mm == nullptr || mm->quitMessagePosted || ! postMessageToSystemQueue (this))
|
|
|
|
{
|
|
|
|
Ptr deleter (this); // (this will delete messages that were just created with a 0 ref count)
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
@@ -158,9 +163,15 @@ void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* cons |
|
|
|
jassert (! currentThreadHasLockedMessageManager());
|
|
|
|
|
|
|
|
const ReferenceCountedObjectPtr<AsyncFunctionCallback> message (new AsyncFunctionCallback (func, parameter));
|
|
|
|
message->post();
|
|
|
|
message->finished.wait();
|
|
|
|
return message->result;
|
|
|
|
|
|
|
|
if (message->post())
|
|
|
|
{
|
|
|
|
message->finished.wait();
|
|
|
|
return message->result;
|
|
|
|
}
|
|
|
|
|
|
|
|
jassertfalse; // the OS message queue failed to send the message!
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
@@ -275,7 +286,9 @@ bool MessageManagerLock::attemptLock (Thread* const threadToCheck, ThreadPoolJob |
|
|
|
}
|
|
|
|
|
|
|
|
blockingMessage = new BlockingMessage();
|
|
|
|
blockingMessage->post();
|
|
|
|
|
|
|
|
if (! blockingMessage->post())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
while (! blockingMessage->lockedEvent.wait (20))
|
|
|
|
{
|
|
|
|
|