aboutsummaryrefslogtreecommitdiff
path: root/zencore/workthreadpool.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-05-02 10:01:47 +0200
committerGitHub <[email protected]>2023-05-02 10:01:47 +0200
commit075d17f8ada47e990fe94606c3d21df409223465 (patch)
treee50549b766a2f3c354798a54ff73404217b4c9af /zencore/workthreadpool.cpp
parentfix: bundle shouldn't append content zip to zen (diff)
downloadzen-075d17f8ada47e990fe94606c3d21df409223465.tar.xz
zen-075d17f8ada47e990fe94606c3d21df409223465.zip
moved source directories into `/src` (#264)
* moved source directories into `/src` * updated bundle.lua for new `src` path * moved some docs, icon * removed old test trees
Diffstat (limited to 'zencore/workthreadpool.cpp')
-rw-r--r--zencore/workthreadpool.cpp83
1 files changed, 0 insertions, 83 deletions
diff --git a/zencore/workthreadpool.cpp b/zencore/workthreadpool.cpp
deleted file mode 100644
index b4328cdbd..000000000
--- a/zencore/workthreadpool.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#include <zencore/workthreadpool.h>
-
-#include <zencore/logging.h>
-
-namespace zen {
-
-namespace detail {
- struct LambdaWork : IWork
- {
- LambdaWork(auto Work) : WorkFunction(Work) {}
- virtual void Execute() override { WorkFunction(); }
-
- std::function<void()> WorkFunction;
- };
-} // namespace detail
-
-WorkerThreadPool::WorkerThreadPool(int InThreadCount)
-{
- for (int i = 0; i < InThreadCount; ++i)
- {
- m_WorkerThreads.emplace_back(&WorkerThreadPool::WorkerThreadFunction, this);
- }
-}
-
-WorkerThreadPool::~WorkerThreadPool()
-{
- m_WorkQueue.CompleteAdding();
-
- for (std::thread& Thread : m_WorkerThreads)
- {
- Thread.join();
- }
-
- m_WorkerThreads.clear();
-}
-
-void
-WorkerThreadPool::ScheduleWork(Ref<IWork> Work)
-{
- m_WorkQueue.Enqueue(std::move(Work));
-}
-
-void
-WorkerThreadPool::ScheduleWork(std::function<void()>&& Work)
-{
- m_WorkQueue.Enqueue(Ref<IWork>(new detail::LambdaWork(Work)));
-}
-
-[[nodiscard]] size_t
-WorkerThreadPool::PendingWork() const
-{
- return m_WorkQueue.Size();
-}
-
-void
-WorkerThreadPool::WorkerThreadFunction()
-{
- do
- {
- Ref<IWork> Work;
- if (m_WorkQueue.WaitAndDequeue(Work))
- {
- try
- {
- Work->Execute();
- }
- catch (std::exception& e)
- {
- Work->m_Exception = std::current_exception();
-
- ZEN_WARN("Caught exception in worker thread: {}", e.what());
- }
- }
- else
- {
- return;
- }
- } while (true);
-}
-
-} // namespace zen