Merge pull request #8395 from CookiePLMonster/improve-work-queue

Improvements to WorkQueueThread
This commit is contained in:
JMC47 2019-10-13 15:24:56 -04:00 committed by GitHub
commit d39555919d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 10 deletions

View File

@ -27,14 +27,14 @@ public:
Shutdown();
m_shutdown.Clear();
m_function = std::move(function);
m_thread = std::thread([this] { ThreadLoop(); });
m_thread = std::thread(&WorkQueueThread::ThreadLoop, this);
}
template <typename... Args>
void EmplaceItem(Args&&... args)
{
{
std::unique_lock<std::mutex> lg(m_lock);
std::lock_guard lg(m_lock);
m_items.emplace(std::forward<Args>(args)...);
}
m_wakeup.Set();
@ -59,14 +59,13 @@ private:
while (true)
{
T item;
{
std::unique_lock<std::mutex> lg(m_lock);
if (m_items.empty())
break;
item = m_items.front();
m_items.pop();
}
std::unique_lock lg(m_lock);
if (m_items.empty())
break;
T item{std::move(m_items.front())};
m_items.pop();
lg.unlock();
m_function(std::move(item));
}