改变写线程退出方式,不再等待一段时间;
This commit is contained in:
@ -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:
|
||||||
};
|
};
|
||||||
|
@ -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,35 +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];
|
||||||
unsigned long allTime2sleep = 0;
|
isExitWriteData2Disk = false;
|
||||||
unsigned long time2sleep;
|
|
||||||
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)
|
||||||
|
{
|
||||||
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
sleepCounters = 1;
|
|
||||||
allTime2sleep = 0;
|
|
||||||
|
|
||||||
|
|
||||||
r_qtx.lock();
|
r_qtx.lock();
|
||||||
@ -908,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;
|
||||||
|
Reference in New Issue
Block a user