aboutsummaryrefslogtreecommitdiff
path: root/zenhttp/workthreadpool.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-03-22 13:50:08 +0100
committerGitHub <[email protected]>2022-03-22 13:50:08 +0100
commit8667509907b8829b5148ee856dce675001051b01 (patch)
tree0252caa7cd01c533809b1b17dfa41721a0cccb82 /zenhttp/workthreadpool.cpp
parentRemove unused TotalAttachmentsSize (Mac warning) (diff)
downloadzen-8667509907b8829b5148ee856dce675001051b01.tar.xz
zen-8667509907b8829b5148ee856dce675001051b01.zip
move workthreadpool to zencore (#63)
Diffstat (limited to 'zenhttp/workthreadpool.cpp')
-rw-r--r--zenhttp/workthreadpool.cpp77
1 files changed, 0 insertions, 77 deletions
diff --git a/zenhttp/workthreadpool.cpp b/zenhttp/workthreadpool.cpp
deleted file mode 100644
index 41eaaae94..000000000
--- a/zenhttp/workthreadpool.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#include "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(new detail::LambdaWork(Work));
-}
-
-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 \ No newline at end of file