#include "DisplayCenter.h" #include "LCDDisplay.h" DisplayCenter::DisplayCenter() : m_lcd(new LCDDisplay()) ,brun(false), m_msgs("DisplayCenter") { m_showthread.reset(new std::thread(&DisplayCenter::runloop,this)); m_distype = DisType::Dis_Unkown; PutMsg(DisType::Dis_Init, code_page_, ClearScreen::All); } DisplayCenter::~DisplayCenter() { brun = false; m_msgs.trigger(); if(m_showthread.get()&& m_showthread->joinable()) { m_showthread->join(); m_showthread.reset(); } m_msgs.clear(); m_lcd.reset(); } void DisplayCenter::PutMsg(DisType distype,int pagenum,ClearScreen clearscreen) { m_msgs.save({distype,clearscreen,(unsigned int )pagenum,""}, true); } void DisplayCenter::ResetMsgQueue() { m_msgs.clear(); } void DisplayCenter::runloop() { brun = true; while (brun) { MsgPair msg; if(m_msgs.take(msg, true)) { m_distype = msg.distype; m_lcd->DisplayState(msg.distype, msg.pagenum, msg.clearscree); } } } DisType DisplayCenter::getcurdistype() { return m_distype; }