Move the code for downloading waveform data into a separate thread

in order to keep the gui responsive.
merge-requests/1/head
Teuniz 2016-10-09 16:59:15 +02:00
rodzic acf53c833f
commit e1436f3961
4 zmienionych plików z 80 dodań i 13 usunięć

Wyświetl plik

@ -55,6 +55,7 @@ HEADERS += settings_dialog.h
HEADERS += screen_thread.h
HEADERS += lan_connect_thread.h
HEADERS += read_settings_thread.h
HEADERS += save_data_thread.h
HEADERS += third_party/kiss_fft/kiss_fft.h
HEADERS += third_party/kiss_fft/_kiss_fft_guts.h
@ -78,6 +79,7 @@ SOURCES += settings_dialog.cpp
SOURCES += screen_thread.cpp
SOURCES += lan_connect_thread.cpp
SOURCES += read_settings_thread.cpp
SOURCES += save_data_thread.cpp
SOURCES += third_party/kiss_fft/kiss_fft.c
SOURCES += third_party/kiss_fft/kiss_fftr.c

Wyświetl plik

@ -35,7 +35,7 @@
#define PROGRAM_NAME "DSRemote"
#define PROGRAM_VERSION "0.32_1610022021"
#define PROGRAM_VERSION "0.32_1610091654"
#define MAX_PATHLEN 4096

Wyświetl plik

@ -64,6 +64,7 @@
#include <QProcess>
#include <QProgressDialog>
#include <QKeySequence>
#include <QEventLoop>
#include <stdio.h>
#include <stdlib.h>
@ -86,6 +87,7 @@
#include "screen_thread.h"
#include "lan_connect_thread.h"
#include "read_settings_thread.h"
#include "save_data_thread.h"
#include "third_party/kiss_fft/kiss_fftr.h"

Wyświetl plik

@ -55,14 +55,27 @@ void UI_Mainwindow::save_screenshot()
tmc_write(":DISP:DATA?");
QApplication::setOverrideCursor(Qt::WaitCursor);
save_data_thread get_data_thrd(0);
qApp->processEvents();
QMessageBox w_msg_box;
w_msg_box.setIcon(QMessageBox::NoIcon);
w_msg_box.setText("Downloading data...");
w_msg_box.setStandardButtons(QMessageBox::Abort);
n = tmc_read();
connect(&get_data_thrd, SIGNAL(finished()), &w_msg_box, SLOT(accept()));
QApplication::restoreOverrideCursor();
get_data_thrd.start();
if(w_msg_box.exec() != QDialog::Accepted)
{
disconnect(&get_data_thrd, 0, 0, 0);
strcpy(str, "Aborted by user.");
goto OUT_ERROR;
}
disconnect(&get_data_thrd, 0, 0, 0);
n = get_data_thrd.get_num_bytes_rcvd();
if(n < 0)
{
strcpy(str, "Can not read from device.");
@ -150,6 +163,13 @@ void UI_Mainwindow::save_screenshot()
OUT_ERROR:
if(get_data_thrd.isFinished() != true)
{
connect(&get_data_thrd, SIGNAL(finished()), &w_msg_box, SLOT(accept()));
w_msg_box.setText("Waiting for thread to finish, please wait...");
w_msg_box.exec();
}
scrn_timer->start(devparms.screentimerival);
QMessageBox msgBox;
@ -183,6 +203,10 @@ void UI_Mainwindow::save_memory_waveform()
double yinc[MAX_CHNS];
QEventLoop ev_loop;
save_data_thread get_data_thrd(0);
if(device == NULL)
{
return;
@ -203,7 +227,9 @@ void UI_Mainwindow::save_memory_waveform()
QProgressDialog progress("Downloading data...", "Abort", 0, mempnts, this);
progress.setWindowModality(Qt::WindowModal);
progress.setMinimumDuration(100);
progress.setMinimumDuration(0);
connect(&get_data_thrd, SIGNAL(finished()), &ev_loop, SLOT(quit()));
statusLabel->setText("Downloading data...");
@ -335,8 +361,6 @@ void UI_Mainwindow::save_memory_waveform()
{
progress.setValue(bytes_rcvd);
qApp->processEvents();
if(progress.wasCanceled())
{
strcpy(str, "Canceled");
@ -366,8 +390,11 @@ void UI_Mainwindow::save_memory_waveform()
tmc_write(":WAV:DATA?");
n = tmc_read();
get_data_thrd.start();
ev_loop.exec();
n = get_data_thrd.get_num_bytes_rcvd();
if(n < 0)
{
sprintf(str, "Can not read from device. line %i file %s", __LINE__, __FILE__);
@ -551,6 +578,8 @@ void UI_Mainwindow::save_memory_waveform()
OUT_NORMAL:
disconnect(&get_data_thrd, 0, 0, 0);
if(hdl >= 0)
{
edfclose_file(hdl);
@ -567,6 +596,8 @@ OUT_NORMAL:
OUT_ERROR:
disconnect(&get_data_thrd, 0, 0, 0);
progress.reset();
statusLabel->setText("Downloading aborted");
@ -576,6 +607,18 @@ OUT_ERROR:
edfclose_file(hdl);
}
if(get_data_thrd.isRunning() == true)
{
QMessageBox w_msg_box;
w_msg_box.setIcon(QMessageBox::NoIcon);
w_msg_box.setText("Waiting for thread to finish, please wait...");
w_msg_box.setStandardButtons(QMessageBox::Abort);
connect(&get_data_thrd, SIGNAL(finished()), &w_msg_box, SLOT(accept()));
w_msg_box.exec();
}
if(progress.wasCanceled() == false)
{
QMessageBox msgBox;
@ -688,6 +731,13 @@ void UI_Mainwindow::save_screen_waveform()
wavbuf[2] = NULL;
wavbuf[3] = NULL;
save_data_thread get_data_thrd(0);
QMessageBox w_msg_box;
w_msg_box.setIcon(QMessageBox::NoIcon);
w_msg_box.setText("Downloading data...");
w_msg_box.setStandardButtons(QMessageBox::Abort);
scrn_timer->stop();
scrn_thread->wait();
@ -803,14 +853,20 @@ void UI_Mainwindow::save_screen_waveform()
tmc_write(":WAV:DATA?");
QApplication::setOverrideCursor(Qt::WaitCursor);
connect(&get_data_thrd, SIGNAL(finished()), &w_msg_box, SLOT(accept()));
qApp->processEvents();
get_data_thrd.start();
n = tmc_read();
if(w_msg_box.exec() != QDialog::Accepted)
{
disconnect(&get_data_thrd, 0, 0, 0);
strcpy(str, "Aborted by user.");
goto OUT_ERROR;
}
QApplication::restoreOverrideCursor();
disconnect(&get_data_thrd, 0, 0, 0);
n = get_data_thrd.get_num_bytes_rcvd();
if(n < 0)
{
strcpy(str, "Can not read from device.");
@ -929,6 +985,13 @@ OUT_NORMAL:
OUT_ERROR:
if(get_data_thrd.isFinished() != true)
{
connect(&get_data_thrd, SIGNAL(finished()), &w_msg_box, SLOT(accept()));
w_msg_box.setText("Waiting for thread to finish, please wait...");
w_msg_box.exec();
}
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText(str);