#include "DisplayCenter.h" #include "LCDDisplay.h" DisplayCenter::DisplayCenter():m_lcd(new LCDDisplay()) ,brun(false) { m_showthread.reset(new std::thread(&DisplayCenter::runloop,this)); m_distype = DisType::Dis_Idel; } DisplayCenter::~DisplayCenter() { brun = false; if(m_showthread.get()&& m_showthread->joinable()) { m_showthread->join(); m_showthread.reset(); } if(!m_msgs.IsShutDown()) m_msgs.ShutDown(); m_lcd.reset(); } void DisplayCenter::PutMsg(DisType distype,int pagenum,ClearScreen clearscreen) { m_msgs.Put({distype,clearscreen,(unsigned int )pagenum,""}); m_distype = distype; printf("\n ----- distype = %d ",distype); } void DisplayCenter::ResetMsgQueue() { m_msgs.Clear(); } void DisplayCenter::runloop() { brun = true; while (brun) { if(m_msgs.Size()>0) { auto msg= m_msgs.Take(); m_lcd->DisplayState(msg.distype,msg.pagenum,msg.clearscree); } else std::this_thread::sleep_for(std::chrono::milliseconds(2)); } } DisType DisplayCenter::getcurdistype() { return m_distype; }