From f39be022a355b601e13a6e4f20fb5dc09a168abf Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 11 Jan 2019 16:03:35 +0000 Subject: [PATCH] Satisfy strange Qt thread-ownership requirements around QProcess objects --- qrenderdoc/Code/Interface/ShaderProcessingTool.cpp | 7 +++++++ qrenderdoc/Code/QRDUtils.h | 1 + 2 files changed, 8 insertions(+) diff --git a/qrenderdoc/Code/Interface/ShaderProcessingTool.cpp b/qrenderdoc/Code/Interface/ShaderProcessingTool.cpp index 361cd3607..5d1d8d894 100644 --- a/qrenderdoc/Code/Interface/ShaderProcessingTool.cpp +++ b/qrenderdoc/Code/Interface/ShaderProcessingTool.cpp @@ -110,6 +110,8 @@ static ShaderToolOutput RunTool(const ShaderProcessingTool &tool, QWidget *windo QByteArray stdout_data; QProcess process; + QThread *mainThread = QThread::currentThread(); + LambdaThread *thread = new LambdaThread([&]() { if(readStdin) process.setStandardInputFile(input_file); @@ -151,7 +153,12 @@ static ShaderToolOutput RunTool(const ShaderProcessingTool &tool, QWidget *windo // QFile::remove(input_file); QFile::remove(output_file); QFile::remove(stdout_file); + + process.moveToThread(mainThread); }); + + thread->moveObjectToThread(&process); + thread->start(); ShowProgressDialog(window, QApplication::translate("ShaderProcessingTool", diff --git a/qrenderdoc/Code/QRDUtils.h b/qrenderdoc/Code/QRDUtils.h index 4859623f6..8b7243973 100644 --- a/qrenderdoc/Code/QRDUtils.h +++ b/qrenderdoc/Code/QRDUtils.h @@ -305,6 +305,7 @@ public: return true; } + void moveObjectToThread(QObject *o) { o->moveToThread(m_Thread); } bool isCurrentThread() { return QThread::currentThread() == m_Thread; } };