logic: added sleep time of 25ms to messaging loop

This commit is contained in:
Eberhard Graether
2014-12-12 17:09:16 +01:00
parent 5f20344252
commit 67b8186658
3 changed files with 35 additions and 8 deletions
+26 -4
View File
@@ -1,5 +1,6 @@
#include "utility/messaging/MessageQueue.h"
#include <chrono>
#include <thread>
#include "utility/logging/logging.h"
@@ -97,6 +98,9 @@ void MessageQueue::startMessageLoop()
}
processMessages();
const int SLEEP_TIME_MS = 25;
std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME_MS));
}
}
@@ -118,6 +122,13 @@ bool MessageQueue::loopIsRunning() const
return m_loopIsRunning;
}
bool MessageQueue::hasMessagesQueued() const
{
std::lock_guard<std::mutex> lock(m_frontMessageBufferMutex);
std::lock_guard<std::mutex> lock2(m_backMessageBufferMutex);
return m_backMessageBuffer->size() + m_frontMessageBuffer->size() > 0;
}
std::shared_ptr<MessageQueue> MessageQueue::s_instance;
MessageQueue::MessageQueue()
@@ -132,14 +143,25 @@ MessageQueue::MessageQueue()
void MessageQueue::processMessages()
{
{
std::lock_guard<std::mutex> lock(m_backMessageBufferMutex);
std::lock_guard<std::mutex> lock(m_frontMessageBufferMutex);
std::lock_guard<std::mutex> lock2(m_backMessageBufferMutex);
m_backMessageBuffer.swap(m_frontMessageBuffer);
}
while (m_frontMessageBuffer->size())
while (true)
{
std::shared_ptr<MessageBase> message = m_frontMessageBuffer->front();
m_frontMessageBuffer->pop();
std::shared_ptr<MessageBase> message;
{
std::lock_guard<std::mutex> lock(m_frontMessageBufferMutex);
if (!m_frontMessageBuffer->size())
{
break;
}
message = m_frontMessageBuffer->front();
m_frontMessageBuffer->pop();
}
std::lock_guard<std::mutex> lock(m_listenersMutex);
+5 -3
View File
@@ -23,9 +23,10 @@ public:
void stopMessageLoop();
bool loopIsRunning() const;
bool hasMessagesQueued() const;
private:
typedef std::queue<std::shared_ptr<MessageBase> > MessageBufferType;
typedef std::queue<std::shared_ptr<MessageBase>> MessageBufferType;
static std::shared_ptr<MessageQueue> s_instance;
@@ -43,8 +44,9 @@ private:
size_t m_listenersLength;
bool m_loopIsRunning;
std::mutex m_backMessageBufferMutex;
std::mutex m_listenersMutex;
mutable std::mutex m_frontMessageBufferMutex;
mutable std::mutex m_backMessageBufferMutex;
mutable std::mutex m_listenersMutex;
mutable std::mutex m_loopMutex;
};
+4 -1
View File
@@ -240,6 +240,9 @@ private:
void waitForThread() const
{
static const int THREAD_WAIT_TIME_MS = 5;
std::this_thread::sleep_for(std::chrono::milliseconds(THREAD_WAIT_TIME_MS));
while (MessageQueue::getInstance()->hasMessagesQueued())
{
std::this_thread::sleep_for(std::chrono::milliseconds(THREAD_WAIT_TIME_MS));
}
}
};