diff --git a/src/threadloop.cpp b/src/threadloop.cpp
index 1f95bb67c91d3da7c0645e095f244cb0694d6b8f..75c4cd729727e3d37de7a308fbb09fced115c337 100644
--- a/src/threadloop.cpp
+++ b/src/threadloop.cpp
@@ -110,7 +110,15 @@ ThreadLoop::join()
         thread_.join();
 }
 
-void ThreadLoop::exit()
+void
+ThreadLoop::waitForCompletion()
+{
+    if (thread_.joinable())
+        thread_.join();
+}
+
+void
+ThreadLoop::exit()
 {
     stop();
     throw ThreadLoopException();
diff --git a/src/threadloop.h b/src/threadloop.h
index 33d6bf8ea6c0c36f4be362f07f9668d32a5e34ef..ff6d6111b0938e2faa522aaaab62b22d906498b3 100644
--- a/src/threadloop.h
+++ b/src/threadloop.h
@@ -55,6 +55,7 @@ public:
     void exit();
     virtual void stop();
     void join();
+    void waitForCompletion(); // thread will stop itself
 
     bool isRunning() const noexcept;
     bool isStopping() const noexcept;