///////////////////////////////////////////////////////////////// // Comm.cpp - Mock Channel component using C++11 thread // // // // Jim Fawcett, CSE687 - Object Oriented Design, Spring 2014 // ///////////////////////////////////////////////////////////////// #define IN_DLL #include "IComm.h" #include "Cpp11-BlockingQueue.h" #include #include class Comm : public IComm { public: Comm(); void PostMessage(const IComm::Message& msg); IComm::Message GetMessage(); private: BlockingQueue inQ; BlockingQueue outQ; std::thread* pThread; }; IComm* IComm::Create() { return new Comm(); } Comm::Comm() { std::function f = [&]() { IComm::Message msg; while (true) { msg = inQ.deQ(); outQ.enQ(msg); if (msg == "stop") break; } }; pThread = new std::thread(f); } void Comm::PostMessage(const IComm::Message& msg) { inQ.enQ(msg); } IComm::Message Comm::GetMessage() { return outQ.deQ(); } #include int main() { Comm comm; comm.PostMessage("first"); comm.PostMessage("second"); comm.PostMessage("stop"); std::cout << "\n " << comm.GetMessage(); std::cout << "\n " << comm.GetMessage(); std::cout << "\n " << comm.GetMessage(); std::cout << "\n\n"; }