From 031471b0c6a25587475034285b9ef736017dc5b7 Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Mon, 21 May 2018 17:57:04 +0300 Subject: [PATCH] Adding background thread to platform. --- platform/platform.cpp | 7 +++++-- platform/platform.hpp | 14 +++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/platform/platform.cpp b/platform/platform.cpp index e1bd5bbab5..dc9b81c5ea 100644 --- a/platform/platform.cpp +++ b/platform/platform.cpp @@ -270,19 +270,22 @@ unsigned Platform::CpuCores() const void Platform::ShutdownThreads() { - ASSERT(m_networkThread && m_fileThread, ()); + ASSERT(m_networkThread && m_fileThread && m_backgroundThread, ()); m_networkThread->ShutdownAndJoin(); m_fileThread->ShutdownAndJoin(); + m_backgroundThread->ShutdownAndJoin(); m_networkThread.reset(); m_fileThread.reset(); + m_backgroundThread.reset(); } void Platform::RunThreads() { - ASSERT(!m_networkThread && !m_fileThread, ()); + ASSERT(!m_networkThread && !m_fileThread && !m_backgroundThread, ()); m_networkThread = make_unique(); m_fileThread = make_unique(); + m_backgroundThread = make_unique(); } string DebugPrint(Platform::EError err) diff --git a/platform/platform.hpp b/platform/platform.hpp index 3c9433a270..66a69e94c9 100644 --- a/platform/platform.hpp +++ b/platform/platform.hpp @@ -84,7 +84,8 @@ public: { File, Network, - Gui + Gui, + Background, }; using TFilesWithType = std::vector>; @@ -125,6 +126,7 @@ protected: std::unique_ptr m_networkThread; std::unique_ptr m_fileThread; + std::unique_ptr m_backgroundThread; public: Platform(); @@ -282,7 +284,7 @@ public: template void RunTask(Thread thread, Task && task) { - ASSERT(m_networkThread && m_fileThread, ()); + ASSERT(m_networkThread && m_fileThread && m_backgroundThread, ()); switch (thread) { case Thread::File: @@ -294,13 +296,16 @@ public: case Thread::Gui: RunOnGuiThread(std::forward(task)); break; + case Thread::Background: + m_backgroundThread->Push(std::forward(task)); + break; } } template void RunDelayedTask(Thread thread, base::WorkerThread::Duration const & delay, Task && task) { - ASSERT(m_networkThread && m_fileThread, ()); + ASSERT(m_networkThread && m_fileThread && m_backgroundThread, ()); switch (thread) { case Thread::File: @@ -312,6 +317,9 @@ public: case Thread::Gui: CHECK(false, ("Delayed tasks for gui thread are not supported yet")); break; + case Thread::Background: + m_backgroundThread->PushDelayed(delay, std::forward(task)); + break; } }