2 Commits
33 ... 34

2 changed files with 16 additions and 14 deletions

View File

@ -108,11 +108,13 @@ private:
int m_iFrameSizeInByte; int m_iFrameSizeInByte;
int m_iNumber_WriteDisk; int m_iNumber_WriteDisk;
MemoryPool<DataBuffer> * m_pool; MemoryPool<DataBuffer> * m_pool;
bool isExitWriteData2Disk;
rgbImage * m_rgbImage; rgbImage * m_rgbImage;
public slots: public slots:
void write2Disk(); void write2Disk();
void exitWriteData2Disk();
signals: signals:
}; };

View File

@ -7,8 +7,6 @@ XimeaImager::XimeaImager()
m_iFrameCounter=0; m_iFrameCounter=0;
m_iImagerState=100; m_iImagerState=100;
//connect(this, SIGNAL(recordFinished()),this, SLOT());
QString ximeaCfgFile = "/media/nvme/300TC/config/ximea.cfg"; QString ximeaCfgFile = "/media/nvme/300TC/config/ximea.cfg";
m_configfile.setConfigfilePath(ximeaCfgFile.toStdString()); m_configfile.setConfigfilePath(ximeaCfgFile.toStdString());
if(!m_configfile.isConfigfileExist()) if(!m_configfile.isConfigfileExist())
@ -567,6 +565,7 @@ void XimeaImager::startRecord(double TimeDifferenceBetweensOSAndSbg,QString base
gettimeofday(&timeEnd, NULL); gettimeofday(&timeEnd, NULL);
runTime = (timeEnd.tv_sec - timeStart.tv_sec ) + (double)(timeEnd.tv_usec -timeStart.tv_usec)/1000000; runTime = (timeEnd.tv_sec - timeStart.tv_sec ) + (double)(timeEnd.tv_usec -timeStart.tv_usec)/1000000;
m_imager.stop(); m_imager.stop();
writeData2Disk->exitWriteData2Disk();
m_iFrameCounter = m_iFrameCounter - indexofbuff; m_iFrameCounter = m_iFrameCounter - indexofbuff;
if (indexofbuff != 0) if (indexofbuff != 0)
@ -847,6 +846,7 @@ void RecordXimeaTemperature::recordTemperature(QString filePath= nullptr)
WriteData2Disk::WriteData2Disk() WriteData2Disk::WriteData2Disk()
{ {
isExitWriteData2Disk = false;
} }
void WriteData2Disk::write2Disk() void WriteData2Disk::write2Disk()
@ -854,28 +854,23 @@ void WriteData2Disk::write2Disk()
QString imageFileName=m_QbaseFileName+".bil"; QString imageFileName=m_QbaseFileName+".bil";
FILE *hFile=fopen(imageFileName.toStdString().c_str(),"w+b"); FILE *hFile=fopen(imageFileName.toStdString().c_str(),"w+b");
int sleepCounters=1;
int frameCounter = 0; int frameCounter = 0;
unsigned short * dataBuffer = new unsigned short[m_iFrameSizeInByte/2*m_iNumber_WriteDisk]; unsigned short * dataBuffer = new unsigned short[m_iFrameSizeInByte/2*m_iNumber_WriteDisk];
isExitWriteData2Disk = false;
while(true) while(true)
{ {
r_qtx.lock(); r_qtx.lock();
bool bempty=m_q->empty(); bool bempty=m_q->empty();
r_qtx.unlock(); r_qtx.unlock();
if(bempty) if(bempty && isExitWriteData2Disk)
{
QThread::msleep(sleepCounters * sleepCounters * m_iNumber_WriteDisk);
// std::cout<<"WriteData2Disk::write2Disk-----------------------队列第几次为空:" << sleepCounters <<std::endl;
sleepCounters++;
if (sleepCounters == 10 && frameCounter != 0)//如果sleepCounters == 10时队列还是空就代表相机停止采集 → 退出此线程
{ {
std::cout<<"WriteData2Disk::write2Disk-----------------------队列为空,采集线程已经退出!"<<std::endl;
break; break;
} }
else if(bempty && !isExitWriteData2Disk)
{
continue; continue;
} }
sleepCounters = 1;
r_qtx.lock(); r_qtx.lock();
@ -901,6 +896,11 @@ void WriteData2Disk::write2Disk()
std::cout<<"WriteData2Disk::write2Disk-----------------------写磁盘线程将退出,共写帧数:" << frameCounter*m_iNumber_WriteDisk <<std::endl; std::cout<<"WriteData2Disk::write2Disk-----------------------写磁盘线程将退出,共写帧数:" << frameCounter*m_iNumber_WriteDisk <<std::endl;
} }
void WriteData2Disk::exitWriteData2Disk()
{
isExitWriteData2Disk = true;
}
void WriteData2Disk::setParm(queue<DataBuffer *> * q, QString baseFileName, int frameSizeInByte, int number_WriteDisk, MemoryPool<DataBuffer> * pool, rgbImage * rgbImage) void WriteData2Disk::setParm(queue<DataBuffer *> * q, QString baseFileName, int frameSizeInByte, int number_WriteDisk, MemoryPool<DataBuffer> * pool, rgbImage * rgbImage)
{ {
m_q = q; m_q = q;