#ifndef __CTHREADQUEUE_H__ #define __CTHREADQUEUE_H__ #include #include #include //============================================================================== enum MessageType { MSG_WORLDSAVE = 0, MSG_SHUTDOWN, MSG_UNKNOWN, MSG_PRINT, MSG_RELOADJS, MSG_CONSOLEBCAST, MSG_PRINTDONE, MSG_PRINTFAILED, MSG_SECTIONBEGIN, MSG_RELOAD, MSG_COUNT }; struct MessagePassed { MessageType actualMessage; std::string data; }; //============================================================================== class CThreadQueue { private: std::queue< MessagePassed > internalQueue; std::mutex queuelock; public: CThreadQueue() = default; auto NewMessage( MessageType toAdd, const std::string& data="" ) ->void; auto GrabMessage()->MessagePassed ; auto Empty()->bool; auto operator<<( MessageType newMessage )->CThreadQueue & ; auto operator<<( char *toPush )->CThreadQueue & ; auto operator<<( const char *toPush )->CThreadQueue &; auto operator<<( const std::string& toPush )->CThreadQueue &; auto bulkData() ->std::queue ; }; extern CThreadQueue messageLoop; #endif