#include "pcmsgbuffer.h" pcmsgbuffer::pcmsgbuffer() { } void pcmsgbuffer::run() { while(!QThread::isInterruptionRequested()) { mMutex.lock(); qint64 nowtime = QDateTime::currentMSecsSinceEpoch(); int i; for(i=0;i OVERTIME) { mvectorpcmsgstate.erase(mvectorpcmsgstate.begin() + i); i--; } } mMutex.unlock(); msleep(100); } } unsigned int pcmsgbuffer::addmsg(int id, qint64 ntime, std::string strVIN, std::string strctrlMD5, std::vector *pxdata,bool bImportant,int nkeeptime,float framerate) { unsigned int nrtn; mMutex.lock(); iv::pcmsg * pmsg = 0; int nsize = mvectormsg.size(); int i; for(i=0;isize() > 0) { cmsg.xdata.resize(pxdata->size()); memcpy(cmsg.xdata.data(),pxdata->data(),pxdata->size()); } cmsg.mlastuptime = QDateTime::currentMSecsSinceEpoch(); cmsg.nsendid = muid; cmsg.mbImportant = bImportant; cmsg.mkeeptime = nkeeptime; cmsg.framerate = framerate; nrtn = muid; muid++; mvectormsg.push_back(cmsg); iv::pcmsgstate xpms;xpms.nsendid = cmsg.nsendid; xpms.nsendtime = QDateTime::currentMSecsSinceEpoch(); mvectorpcmsgstate.push_back(xpms); mMutex.unlock(); return nrtn; } if((pmsg->mbImportant != true)||((QDateTime::currentMSecsSinceEpoch() - pmsg->mlastuptime)>=pmsg->mkeeptime)) { changesendstate(pmsg->nsendid,-2); pmsg->mbImportant = bImportant; pmsg->mkeeptime = nkeeptime; pmsg->id = id; pmsg->ntime = ntime; pmsg->strctrlMD5 = strctrlMD5; pmsg->xdata.clear(); pmsg->nsendid = muid; // cmsg.mlastuptime = QDateTime::currentMSecsSinceEpoch(); nrtn = muid; iv::pcmsgstate xpms;xpms.nsendid = pmsg->nsendid; pmsg->mlastuptime = QDateTime::currentMSecsSinceEpoch(); mvectorpcmsgstate.push_back(xpms); muid++; if(pxdata->size()>0) { pmsg->xdata.resize(pxdata->size()); memcpy(pmsg->xdata.data(),pxdata->data(),pxdata->size()); } } mMutex.unlock(); return nrtn; } int pcmsgbuffer::getmsg(std::string strVIN, std::string strctrlMD5, int &id, qint64 &ntime, std::vector *pxdata,float * framerate) { mMutex.lock(); iv::pcmsg * pmsg = 0; int nsize = mvectormsg.size(); int i; int npos; for(i=0;istrctrlMD5) { std::cout<<" ctrl error."<nsendid,-1); mMutex.unlock(); return -2; } id = pmsg->id; ntime = pmsg->ntime; *framerate = pmsg->framerate; pxdata->clear(); int ndatasize = pmsg->xdata.size(); pxdata->resize(ndatasize); memcpy(pxdata->data(),pmsg->xdata.data(),ndatasize); changesendstate(pmsg->nsendid,1); mvectormsg.erase(mvectormsg.begin()+npos); mMutex.unlock(); return 1; } void pcmsgbuffer::changesendstate(int nsendid, int nstate) { int nstatesize = mvectorpcmsgstate.size(); int i; for(i=0;i