Fix a UI block bug.

This commit is contained in:
Krad
2021-10-22 14:48:55 +08:00
parent 3e4a12861f
commit 1785953b8c
2 changed files with 20 additions and 16 deletions

View File

@@ -94,7 +94,7 @@ void DeviceManager::initDevice() {
{ {
lastStatus = SCANNING; lastStatus = SCANNING;
previewing = true; previewing = true;
timerID = startTimer(500); // timerID = startTimer(500);
TRIGGER_EVENT(GUIEvents::ResponsePreview, nullptr, nullptr); TRIGGER_EVENT(GUIEvents::ResponsePreview, nullptr, nullptr);
TRIGGER_EVENT(GUIEvents::InvokeOperationEnd, nullptr, nullptr); TRIGGER_EVENT(GUIEvents::InvokeOperationEnd, nullptr, nullptr);
return; 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!"); QString msg(inf.status!=READY?"Can't start preview,Device is not ready!":"Start preview operation fail!");
THROW_ERROR(msg); 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) { void DeviceManager::timerEvent(QTimerEvent *event) {
if (event->timerId() !=deviceInfTimerID) if (event->timerId() !=deviceInfTimerID)
{ {
StatusInfo inf = GetStatus(); 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) if (inf.status==SCANNING)
{ {
lastStatus = SCANNING; lastStatus = SCANNING;
//normal scan //normal scan
if(!previewing)
{
QVariant var(inf.progress); QVariant var(inf.progress);
TRIGGER_EVENT(GUIEvents::InvokeOperationProgress, nullptr, (QObject*)&var); 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;
}
} else{ } else{
if (lastStatus == SCANNING && !errorOccured) if (lastStatus == SCANNING && !errorOccured)
{ {

View File

@@ -6,6 +6,7 @@
#define GUI_DEVICEMANAGER_H #define GUI_DEVICEMANAGER_H
#include <QObject> #include <QObject>
#include <QThread>
class DeviceManager:public QObject { class DeviceManager:public QObject {
Q_OBJECT Q_OBJECT
@@ -25,7 +26,9 @@ private:
int deviceInfTimerID = -1; int deviceInfTimerID = -1;
int lastStatus=-1; int lastStatus=-1;
bool previewing = false; bool previewing = false;
bool endLoop = false;
bool errorOccured = false; bool errorOccured = false;
QThread* previewDataCaller;
}; };