#include "DigitalProcess.h" DigitalProcess::DigitalProcess(QObject* parent) : IProcess(parent) {} DigitalProcess::~DigitalProcess() { if (m_pConstBuffer) { delete m_pConstBuffer; m_pConstBuffer = nullptr; } m_file.write(m_fileArray); m_file.flush(); m_file.close(); } void DigitalProcess::run() { unsigned char* m_ReadBuffer = new unsigned char[m_pFrame->m_uiFrameLen]; unsigned short usReadLen; m_bNeedWork = true; while (m_bNeedWork) { usReadLen = m_pConstBuffer->read(m_ReadBuffer, m_pFrame->m_uiFrameLen); if (usReadLen <= 0) { QThread::usleep(1); continue; } // 提取通道数据 m_tempArray = QByteArray((char*)m_ReadBuffer, m_pFrame->m_uiFrameLen); // 从数据通道中提取数据 // 提取一个数据,添加一个时间 for (auto channel : m_pParam->m_pChannelGroup->m_vecChannel) { m_validArray.append(m_tempArray.at(channel->m_uiAbsolutePos)); } m_tempArray.clear(); // 剔除无效数据 if (m_usFillSize != 0) { rejectFillData(); } else { m_ableArray = m_validArray; m_validArray.clear(); } // 将数据写入文件中 m_fileArray.append(m_ableArray); m_ableArray.clear(); if (DataAchiveBuffer <= m_fileArray.size()) { m_file.write(m_fileArray); m_file.flush(); m_fileArray.clear(); } } } void DigitalProcess::rejectFillData() { m_uiDataSize = m_validArray.size(); m_uiIndex = 0; while (m_uiIndex + m_usFillSize <= m_uiDataSize) { if (m_validArray.at(m_uiIndex) != m_fillArray.at(0)) { m_ableArray.append(m_validArray.at(m_uiIndex)); ++m_uiIndex; } else if (m_validArray.at(m_uiIndex) == m_fillArray.at(0)) { if (m_validArray.mid(m_uiIndex, m_usFillSize) != m_fillArray) { m_ableArray.append(m_validArray.at(m_uiIndex)); ++m_uiIndex; } else { m_uiIndex += m_usFillSize; } } } m_validArray.remove(0, m_uiIndex); m_uiDataSize = 0; m_uiIndex = 0; }