diff options
-rw-r--r-- | mainwindow.cpp | 14 | ||||
-rw-r--r-- | mainwindow.h | 2 |
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: |