diff options
Diffstat (limited to 'src/libs/clangsupport/progresscounter.h')
-rw-r--r-- | src/libs/clangsupport/progresscounter.h | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/src/libs/clangsupport/progresscounter.h b/src/libs/clangsupport/progresscounter.h index fbdc9dda45..449754f914 100644 --- a/src/libs/clangsupport/progresscounter.h +++ b/src/libs/clangsupport/progresscounter.h @@ -26,6 +26,7 @@ #pragma once #include <functional> +#include <mutex> namespace ClangBackEnd { @@ -33,6 +34,7 @@ class ProgressCounter { public: using SetProgressCallback = std::function<void(int, int)>; + using Lock = std::lock_guard<std::mutex>; ProgressCounter(SetProgressCallback &&progressCallback) : m_progressCallback(std::move(progressCallback)) @@ -40,6 +42,8 @@ public: void addTotal(int total) { + Lock lock(m_mutex); + if (total) { m_total += total; @@ -49,6 +53,8 @@ public: void removeTotal(int total) { + Lock lock(m_mutex); + if (total) { m_total -= total; @@ -58,6 +64,8 @@ public: void addProgress(int progress) { + Lock lock(m_mutex); + if (progress) { m_progress += progress; @@ -65,27 +73,33 @@ public: } } - void sendProgress() + int total() const { - m_progressCallback(m_progress, m_total); + Lock lock(m_mutex); - if (m_progress >= m_total) { - m_progress = 0; - m_total = 0; - } + return m_total; } - int total() const + int progress() const { + Lock lock(m_mutex); + return m_total; } - int progress() const +private: + void sendProgress() { - return m_total; + m_progressCallback(m_progress, m_total); + + if (m_progress >= m_total) { + m_progress = 0; + m_total = 0; + } } private: + mutable std::mutex m_mutex; std::function<void(int, int)> m_progressCallback; int m_progress = 0; int m_total = 0; |