diff --git a/Source/Core/AudioCommon/CubebStream.cpp b/Source/Core/AudioCommon/CubebStream.cpp index 92ab886580..4f97b9edd6 100644 --- a/Source/Core/AudioCommon/CubebStream.cpp +++ b/Source/Core/AudioCommon/CubebStream.cpp @@ -39,10 +39,10 @@ void CubebStream::StateCallback(cubeb_stream* stream, void* user_data, cubeb_sta CubebStream::CubebStream() #ifdef _WIN32 - : m_work_queue("Cubeb Worker", [](const std::function& func) { func(); }) + : m_work_queue("Cubeb Worker") { Common::Event sync_event; - m_work_queue.EmplaceItem([this, &sync_event] { + m_work_queue.Push([this, &sync_event] { Common::ScopeGuard sync_event_guard([&sync_event] { sync_event.Set(); }); auto result = ::CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE); m_coinit_success = result == S_OK; @@ -62,7 +62,7 @@ bool CubebStream::Init() if (!m_coinit_success) return false; Common::Event sync_event; - m_work_queue.EmplaceItem([this, &return_value, &sync_event] { + m_work_queue.Push([this, &return_value, &sync_event] { Common::ScopeGuard sync_event_guard([&sync_event] { sync_event.Set(); }); #endif @@ -113,7 +113,7 @@ bool CubebStream::SetRunning(bool running) if (!m_coinit_success) return false; Common::Event sync_event; - m_work_queue.EmplaceItem([this, running, &return_value, &sync_event] { + m_work_queue.Push([this, running, &return_value, &sync_event] { Common::ScopeGuard sync_event_guard([&sync_event] { sync_event.Set(); }); #endif if (running) @@ -132,7 +132,7 @@ CubebStream::~CubebStream() { #ifdef _WIN32 Common::Event sync_event; - m_work_queue.EmplaceItem([this, &sync_event] { + m_work_queue.Push([this, &sync_event] { Common::ScopeGuard sync_event_guard([&sync_event] { sync_event.Set(); }); #endif cubeb_stream_stop(m_stream); @@ -156,7 +156,7 @@ void CubebStream::SetVolume(int volume) if (!m_coinit_success) return; Common::Event sync_event; - m_work_queue.EmplaceItem([this, volume, &sync_event] { + m_work_queue.Push([this, volume, &sync_event] { Common::ScopeGuard sync_event_guard([&sync_event] { sync_event.Set(); }); #endif cubeb_stream_set_volume(m_stream, volume / 100.0f); diff --git a/Source/Core/AudioCommon/CubebStream.h b/Source/Core/AudioCommon/CubebStream.h index 72d7d1c117..a523d65441 100644 --- a/Source/Core/AudioCommon/CubebStream.h +++ b/Source/Core/AudioCommon/CubebStream.h @@ -39,7 +39,7 @@ private: std::vector m_floatstereo_buffer; #ifdef _WIN32 - Common::WorkQueueThread> m_work_queue; + Common::AsyncWorkThread m_work_queue; bool m_coinit_success = false; bool m_should_couninit = false; #endif diff --git a/Source/Core/Common/WorkQueueThread.h b/Source/Core/Common/WorkQueueThread.h index 190afcabf2..9ad7c4f471 100644 --- a/Source/Core/Common/WorkQueueThread.h +++ b/Source/Core/Common/WorkQueueThread.h @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -13,8 +14,6 @@ #include "Common/SPSCQueue.h" #include "Common/Thread.h" -// A thread that executes the given function for every item placed into its queue. - namespace Common { namespace detail @@ -158,6 +157,38 @@ private: using ProducerMutex = std::conditional_t; ProducerMutex m_mutex; }; + +// A WorkQueueThread-like class that takes functions to invoke. +template