From 47be248cadf39b5d5c0e91395764918de109aa9e Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 9 Feb 2017 14:47:46 +0000 Subject: [PATCH] Don't run slow blocking remote probes on UI thread --- qrenderdoc/Windows/MainWindow.cpp | 16 ++++++++++++---- qrenderdoc/Windows/MainWindow.h | 3 ++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/qrenderdoc/Windows/MainWindow.cpp b/qrenderdoc/Windows/MainWindow.cpp index 92f0cd6c5..38c8055dd 100644 --- a/qrenderdoc/Windows/MainWindow.cpp +++ b/qrenderdoc/Windows/MainWindow.cpp @@ -146,10 +146,15 @@ MainWindow::MainWindow(CaptureContext *ctx) : QMainWindow(NULL), ui(new Ui::Main m_MessageTick.setInterval(500); m_MessageTick.start(); - QObject::connect(&m_RemoteProbe, &QTimer::timeout, this, &MainWindow::remoteProbe); - m_RemoteProbe.setSingleShot(false); - m_RemoteProbe.setInterval(7500); - m_RemoteProbe.start(); + m_RemoteProbeSemaphore.release(); + m_RemoteProbe = new LambdaThread([this]() { + while(m_RemoteProbeSemaphore.available()) + { + remoteProbe(); + QThread::msleep(7500); + } + }); + m_RemoteProbe->start(); ui->statusBar->setStyleSheet("QStatusBar::item { border: 0px }"); @@ -221,6 +226,9 @@ MainWindow::MainWindow(CaptureContext *ctx) : QMainWindow(NULL), ui(new Ui::Main MainWindow::~MainWindow() { + m_RemoteProbeSemaphore.acquire(); + m_RemoteProbe->wait(); + m_RemoteProbe->deleteLater(); delete ui; } diff --git a/qrenderdoc/Windows/MainWindow.h b/qrenderdoc/Windows/MainWindow.h index 3e79e6591..7632c62cc 100644 --- a/qrenderdoc/Windows/MainWindow.h +++ b/qrenderdoc/Windows/MainWindow.h @@ -133,7 +133,8 @@ private: QToolButton *contextChooser; QTimer m_MessageTick; - QTimer m_RemoteProbe; + QSemaphore m_RemoteProbeSemaphore; + LambdaThread *m_RemoteProbe; bool m_messageAlternate = false;