#pragma once #pragma warning(disable:4251) #include #include #include #include namespace ns_mess { struct MESSAGE_BASE { virtual ~MESSAGE_BASE() {} }; template struct wrapped_message : MESSAGE_BASE { Msg contents; explicit wrapped_message(Msg const& contents_) : contents(contents_) {} }; class __declspec(dllexport) CMyQueue { std::mutex m_Mutex; std::condition_variable m_ConditionVariable; std::queue > m_Queue; public: template void PushToQueue(T const& msg) { std::lock_guard lk(m_Mutex); m_Queue.push(std::make_shared >(msg)); m_ConditionVariable.notify_all(); } std::shared_ptr WaitMessage() { std::unique_lock lk(m_Mutex); m_ConditionVariable.wait(lk, [&] {return !m_Queue.empty(); }); auto res = m_Queue.front(); m_Queue.pop(); return res; } }; }