diff options
| author | Stefan Boberg <[email protected]> | 2023-05-02 10:01:47 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-02 10:01:47 +0200 |
| commit | 075d17f8ada47e990fe94606c3d21df409223465 (patch) | |
| tree | e50549b766a2f3c354798a54ff73404217b4c9af /zencore/workthreadpool.cpp | |
| parent | fix: bundle shouldn't append content zip to zen (diff) | |
| download | zen-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.cpp | 83 |
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 |