summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mainwindow.cpp14
-rw-r--r--mainwindow.h2
2 files changed, 16 insertions, 0 deletions
diff --git a/mainwindow.cpp b/mainwindow.cpp
index 9b6534d..efaf5b7 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -244,8 +244,16 @@ MainWindow::MainWindow(QWidget *parent)
if (!ppp) throw std::runtime_error("PcapPlusPlus was not initialized.");
isProcessing = true;
+ const QDateTime startTime = QDateTime::currentDateTime();
while (ppp->processPacket(packet)) {
+ if (isAboutToClose)
+ break;
+
emit onPacketAvailable();
+
+ const QDateTime currentTime = QDateTime::currentDateTime();
+ if (startTime.msecsTo(currentTime) % 100 == 0)
+ qApp->processEvents();
}
ui->tableWidget->clearSelection();
isProcessing = false;
@@ -315,6 +323,12 @@ pcpp::RawPacket* MainWindow::currentSelectedPacket()
return &ppp->getRawPacket(selected.last()->row());
}
+void MainWindow::closeEvent(QCloseEvent *closeEvent)
+{
+ isAboutToClose = true;
+ closeEvent->accept();
+}
+
bool MainWindow::eventFilter(QObject *obj __attribute__((unused)), QEvent *event)
{
if (event->type() == QEvent::MouseMove)
diff --git a/mainwindow.h b/mainwindow.h
index 88b78c9..bd51110 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -26,6 +26,7 @@ public:
bool updateTableRow(size_t index);
private:
+ void closeEvent(QCloseEvent *bar);
bool eventFilter(QObject *obj, QEvent *event);
void updateStatusBarMessage(const QString & message);
@@ -52,6 +53,7 @@ private:
Ui::MainWindow *ui = nullptr;
QString statusbarMessage;
PcapPlusPlus *ppp = nullptr;
+ std::atomic<bool> isAboutToClose = false;
std::atomic<bool> isProcessing = false;
signals: