diff --git a/src/device/DeviceManager.cpp b/src/device/DeviceManager.cpp index 61fc47e..4953956 100644 --- a/src/device/DeviceManager.cpp +++ b/src/device/DeviceManager.cpp @@ -94,7 +94,7 @@ void DeviceManager::initDevice() { { lastStatus = SCANNING; previewing = true; - timerID = startTimer(500); +// timerID = startTimer(500); TRIGGER_EVENT(GUIEvents::ResponsePreview, nullptr, nullptr); TRIGGER_EVENT(GUIEvents::InvokeOperationEnd, nullptr, nullptr); return; @@ -103,31 +103,32 @@ void DeviceManager::initDevice() { QString msg(inf.status!=READY?"Can't start preview,Device is not ready!":"Start preview operation fail!"); THROW_ERROR(msg); }); + + previewDataCaller = QThread::create([=](){ + while (!endLoop) + { + QThread::msleep(500); + if (!previewing) continue; + const char * data = GetPreviewData(); + QByteArray bytes =QByteArray::fromRawData(data,140*140); + if (!previewing) continue; + TRIGGER_EVENT(GUIEvents::ResponsePreviewData, nullptr, (QObject*)(&bytes)); + } + }); + previewDataCaller->start(); } void DeviceManager::timerEvent(QTimerEvent *event) { if (event->timerId() !=deviceInfTimerID) { StatusInfo inf = GetStatus(); - printf("Timer request status, status:%s\r\n",getStatusString(inf.status)); +// printf("Timer request status, status:%s\r\n",getStatusString(inf.status)); if (inf.status==SCANNING) { lastStatus = SCANNING; //normal scan - if(!previewing) - { - QVariant var(inf.progress); - TRIGGER_EVENT(GUIEvents::InvokeOperationProgress, nullptr, (QObject*)&var); - } - //preview scan - else{ - const char * data = GetPreviewData(); - if (!data) return; - QByteArray bytes =QByteArray::fromRawData(data,140*140); - TRIGGER_EVENT(GUIEvents::ResponsePreviewData, nullptr, (QObject*)(&bytes)); -// delete [] data; - } - + QVariant var(inf.progress); + TRIGGER_EVENT(GUIEvents::InvokeOperationProgress, nullptr, (QObject*)&var); } else{ if (lastStatus == SCANNING && !errorOccured) { diff --git a/src/device/DeviceManager.h b/src/device/DeviceManager.h index 0ddd74e..6f82a45 100644 --- a/src/device/DeviceManager.h +++ b/src/device/DeviceManager.h @@ -6,6 +6,7 @@ #define GUI_DEVICEMANAGER_H #include +#include class DeviceManager:public QObject { Q_OBJECT @@ -25,7 +26,9 @@ private: int deviceInfTimerID = -1; int lastStatus=-1; bool previewing = false; + bool endLoop = false; bool errorOccured = false; + QThread* previewDataCaller; };