Files
TowerOptoSifAndSpectral/source/CaptureThread/Scheduler.cpp
zhangzhuo 6d20b2d3fb 1.修改了Grabber中FSController的初始化过程,现在不会再出现QSerialPort跨线程调用问题。 2.修改了Grabber中主采集线程的一个信号量重置bug,该bug可能会引发采集慢的光谱仪在串口模式下数据不全。
3.修改了采集单帧功能函数,现在ATP控制类中的singleshot函数依旧会检查数据校验和,但不会应为校验和错误删除数据,以适配IS1校验和问题。注意,数据长度不对时还是会放弃本帧数据。                                                                             4.优化了ATP谱仪控制类中的多个函数,提高了其响应速度。
2022-01-20 09:36:35 +08:00

77 lines
1.6 KiB
C++

#include "Scheduler.h"
Scheduler::Scheduler(QObject* parent /*= nullptr*/)
{
m_GrabTimer = new QTimer(this);
connect(m_GrabTimer, &QTimer::timeout, this, &Scheduler::OnTimeCounter);
connect(this, &Scheduler::SignalSelfStart, this, &Scheduler::StartAsPlanned);
}
Scheduler::~Scheduler()
{
if (m_GrabTimer != NULL)
{
m_GrabTimer->stop();
delete m_GrabTimer;
}
}
void Scheduler::SetAcqTimeParams(AcqTimeSettings struAcqTime)
{
m_struAcqTime = struAcqTime;
}
void Scheduler::Preheating()
{
qDebug() << "Start Preheating";
#ifdef _DEBUG
QThread::msleep(5000);
#else
QThread::msleep(10000);//NEED TO CHANGE BEFOR HAND TO CUSTOM
#endif
qDebug() << "Preheating Finished";
}
void Scheduler::SelfStart()
{
emit SignalSelfStart();
}
void Scheduler::StartAsPlanned()
{
bool bStopWait = false;
QTime qtTime = QTime::currentTime();
while (!bStopWait)
{
QThread::msleep(100);
if (m_struAcqTime.qtStartTime <= qtTime && qtTime < m_struAcqTime.qtStopTime)
{
bStopWait = true;
}
}
int iIntervalInMS = m_struAcqTime.qtInterval.hour() * 3600 * 1000 + m_struAcqTime.qtInterval.minute() * 60 * 1000 + m_struAcqTime.qtInterval.second() * 1000;
m_GrabTimer->start(5000);
//this->OnTimeCounter();
//emit &QTimer::timeout;
}
int Scheduler::OnTimeCounter()
{
QTime qtTime = QTime::currentTime();
if (m_struAcqTime.qtStartTime <= qtTime && qtTime < m_struAcqTime.qtStopTime)
{
qDebug() << "it's time to work...work work.";
emit SignalGrabOnce();
return 0;
}
else
{
system("gpio write 1 0");//É豸¶Ïµç
qDebug() << "gpio write 1 0......"<<endl;
qDebug() << "Non working time. Idling......";
return 0;
}
}