改变写线程退出方式,不再等待一段时间;
This commit is contained in:
@ -108,11 +108,13 @@ private:
|
||||
int m_iFrameSizeInByte;
|
||||
int m_iNumber_WriteDisk;
|
||||
MemoryPool<DataBuffer> * m_pool;
|
||||
bool isExitWriteData2Disk;
|
||||
|
||||
rgbImage * m_rgbImage;
|
||||
|
||||
public slots:
|
||||
void write2Disk();
|
||||
void exitWriteData2Disk();
|
||||
|
||||
signals:
|
||||
};
|
||||
|
@ -7,8 +7,6 @@ XimeaImager::XimeaImager()
|
||||
m_iFrameCounter=0;
|
||||
m_iImagerState=100;
|
||||
|
||||
//connect(this, SIGNAL(recordFinished()),this, SLOT());
|
||||
|
||||
QString ximeaCfgFile = "/media/nvme/300TC/config/ximea.cfg";
|
||||
m_configfile.setConfigfilePath(ximeaCfgFile.toStdString());
|
||||
if(!m_configfile.isConfigfileExist())
|
||||
@ -567,6 +565,7 @@ void XimeaImager::startRecord(double TimeDifferenceBetweensOSAndSbg,QString base
|
||||
gettimeofday(&timeEnd, NULL);
|
||||
runTime = (timeEnd.tv_sec - timeStart.tv_sec ) + (double)(timeEnd.tv_usec -timeStart.tv_usec)/1000000;
|
||||
m_imager.stop();
|
||||
writeData2Disk->exitWriteData2Disk();
|
||||
|
||||
m_iFrameCounter = m_iFrameCounter - indexofbuff;
|
||||
if (indexofbuff != 0)
|
||||
@ -847,6 +846,7 @@ void RecordXimeaTemperature::recordTemperature(QString filePath= nullptr)
|
||||
|
||||
WriteData2Disk::WriteData2Disk()
|
||||
{
|
||||
isExitWriteData2Disk = false;
|
||||
}
|
||||
|
||||
void WriteData2Disk::write2Disk()
|
||||
@ -854,35 +854,23 @@ void WriteData2Disk::write2Disk()
|
||||
QString imageFileName=m_QbaseFileName+".bil";
|
||||
FILE *hFile=fopen(imageFileName.toStdString().c_str(),"w+b");
|
||||
|
||||
int sleepCounters=1;
|
||||
int frameCounter = 0;
|
||||
unsigned short * dataBuffer = new unsigned short[m_iFrameSizeInByte/2*m_iNumber_WriteDisk];
|
||||
unsigned long allTime2sleep = 0;
|
||||
unsigned long time2sleep;
|
||||
isExitWriteData2Disk = false;
|
||||
while(true)
|
||||
{
|
||||
r_qtx.lock();
|
||||
bool bempty=m_q->empty();
|
||||
r_qtx.unlock();
|
||||
if(bempty)
|
||||
if(bempty && isExitWriteData2Disk)
|
||||
{
|
||||
std::cout<<"WriteData2Disk::write2Disk-----------------------队列为空,采集线程已经退出!"<<std::endl;
|
||||
break;
|
||||
}
|
||||
else if(bempty && !isExitWriteData2Disk)
|
||||
{
|
||||
time2sleep = sleepCounters * sleepCounters * 15;
|
||||
allTime2sleep = allTime2sleep + time2sleep;
|
||||
QThread::msleep(time2sleep);
|
||||
|
||||
// std::cout<<"WriteData2Disk::write2Disk-----------------------队列第几次为空:" << sleepCounters <<std::endl;
|
||||
sleepCounters++;
|
||||
|
||||
if (sleepCounters == 10 && frameCounter != 0)//如果sleepCounters == 10时,队列还是空,就代表相机停止采集 → 退出此线程
|
||||
{
|
||||
std::cout<<"WriteData2Disk::write2Disk-----------------------总共等待时间:" << allTime2sleep <<std::endl;
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
sleepCounters = 1;
|
||||
allTime2sleep = 0;
|
||||
|
||||
|
||||
r_qtx.lock();
|
||||
@ -908,6 +896,11 @@ void WriteData2Disk::write2Disk()
|
||||
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)
|
||||
{
|
||||
m_q = q;
|
||||
|
Reference in New Issue
Block a user