From 945eec500b6d93b1312e95e76eda99333c103ada Mon Sep 17 00:00:00 2001 From: philippegorley <philippe.gorley@savoirfairelinux.com> Date: Wed, 4 Jul 2018 14:28:28 -0400 Subject: [PATCH] thread: add blocking join Adds a way to wait until the thread finishes its work before joining. Change-Id: I7080a4515ce6c1158c74c6eb8973a13a4b097419 --- src/threadloop.cpp | 10 +++++++++- src/threadloop.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/threadloop.cpp b/src/threadloop.cpp index 1f95bb67c9..75c4cd7297 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 33d6bf8ea6..ff6d6111b0 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; -- GitLab