Browse Source

MessageMananger: Made dispatchNextMessageOnSystemQueue() accessible by internal code

v6.1.6
ed 4 years ago
parent
commit
11d872ea1b
6 changed files with 31 additions and 43 deletions
  1. +27
    -24
      modules/juce_events/messages/juce_MessageManager.cpp
  2. +0
    -1
      modules/juce_events/messages/juce_MessageManager.h
  3. +0
    -9
      modules/juce_events/native/juce_android_Messaging.cpp
  4. +1
    -1
      modules/juce_events/native/juce_linux_Messaging.cpp
  5. +1
    -6
      modules/juce_events/native/juce_win32_Messaging.cpp
  6. +2
    -2
      modules/juce_gui_basics/native/juce_win32_FileChooser.cpp

+ 27
- 24
modules/juce_events/messages/juce_MessageManager.cpp View File

@@ -78,31 +78,10 @@ bool MessageManager::MessageBase::post()
}
//==============================================================================
#if JUCE_MODAL_LOOPS_PERMITTED && ! (JUCE_MAC || JUCE_IOS)
bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor)
{
jassert (isThisTheMessageThread()); // must only be called by the message thread
auto endTime = Time::currentTimeMillis() + millisecondsToRunFor;
while (quitMessageReceived.get() == 0)
{
JUCE_TRY
{
if (! dispatchNextMessageOnSystemQueue (millisecondsToRunFor >= 0))
Thread::sleep (1);
}
JUCE_CATCH_EXCEPTION
if (millisecondsToRunFor >= 0 && Time::currentTimeMillis() >= endTime)
break;
}
return quitMessageReceived.get() == 0;
}
#endif
#if ! (JUCE_MAC || JUCE_IOS || JUCE_ANDROID)
// implemented in platform-specific code (juce_linux_Messaging.cpp and juce_win32_Messaging.cpp)
bool dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages);
class MessageManager::QuitMessage : public MessageManager::MessageBase
{
public:
@@ -138,6 +117,30 @@ void MessageManager::stopDispatchLoop()
quitMessagePosted = true;
}
#if JUCE_MODAL_LOOPS_PERMITTED
bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor)
{
jassert (isThisTheMessageThread()); // must only be called by the message thread
auto endTime = Time::currentTimeMillis() + millisecondsToRunFor;
while (quitMessageReceived.get() == 0)
{
JUCE_TRY
{
if (! dispatchNextMessageOnSystemQueue (millisecondsToRunFor >= 0))
Thread::sleep (1);
}
JUCE_CATCH_EXCEPTION
if (millisecondsToRunFor >= 0 && Time::currentTimeMillis() >= endTime)
break;
}
return quitMessageReceived.get() == 0;
}
#endif
#endif
//==============================================================================


+ 0
- 1
modules/juce_events/messages/juce_MessageManager.h View File

@@ -333,7 +333,6 @@ private:
static void* exitModalLoopCallback (void*);
static void doPlatformSpecificInitialisation();
static void doPlatformSpecificShutdown();
static bool dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages);
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MessageManager)
};


+ 0
- 9
modules/juce_events/native/juce_android_Messaging.cpp View File

@@ -118,15 +118,6 @@ JUCE_IMPLEMENT_SINGLETON (AndroidMessageQueue)
void MessageManager::doPlatformSpecificInitialisation() { AndroidMessageQueue::getInstance(); }
void MessageManager::doPlatformSpecificShutdown() { AndroidMessageQueue::deleteInstance(); }
//==============================================================================
bool MessageManager::dispatchNextMessageOnSystemQueue (const bool)
{
Logger::outputDebugString ("*** Modal loops are not possible in Android!! Exiting...");
exit (1);
return true;
}
bool MessageManager::postMessageToSystemQueue (MessageManager::MessageBase* const message)
{
return AndroidMessageQueue::getInstance()->post (message);


+ 1
- 1
modules/juce_events/native/juce_linux_Messaging.cpp View File

@@ -288,7 +288,7 @@ void MessageManager::broadcastMessage (const String&)
}
// this function expects that it will NEVER be called simultaneously for two concurrent threads
bool MessageManager::dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
bool dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
{
for (;;)
{


+ 1
- 6
modules/juce_events/native/juce_win32_Messaging.cpp View File

@@ -260,7 +260,7 @@ JUCE_IMPLEMENT_SINGLETON (InternalMessageQueue)
const TCHAR InternalMessageQueue::messageWindowName[] = _T("JUCEWindow");
//==============================================================================
bool windowsDispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
bool dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
{
if (auto* queue = InternalMessageQueue::getInstanceWithoutCreating())
return queue->dispatchNextMessage (returnIfNoPendingMessages);
@@ -268,11 +268,6 @@ bool windowsDispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
return false;
}
bool MessageManager::dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
{
return windowsDispatchNextMessageOnSystemQueue (returnIfNoPendingMessages);
}
bool MessageManager::postMessageToSystemQueue (MessageManager::MessageBase* const message)
{
if (auto* queue = InternalMessageQueue::getInstanceWithoutCreating())


+ 2
- 2
modules/juce_gui_basics/native/juce_win32_FileChooser.cpp View File

@@ -31,7 +31,7 @@ namespace juce
{
// Implemented in juce_win32_Messaging.cpp
bool windowsDispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages);
bool dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages);
class Win32NativeFileChooser : private Thread
{
@@ -81,7 +81,7 @@ public:
while (isThreadRunning())
{
if (! windowsDispatchNextMessageOnSystemQueue (true))
if (! dispatchNextMessageOnSystemQueue (true))
Thread::sleep (1);
}
}


Loading…
Cancel
Save