diff options
author | Marco Bubke <marco.bubke@qt.io> | 2019-02-07 15:54:24 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2019-02-12 14:02:12 +0000 |
commit | 44d5e101857523f0791cfe45ba73a45e0a4fdb33 (patch) | |
tree | 9ac40b11bdb2ae4eaf105f20d1682870bf48fcf2 /src/libs | |
parent | 97ec6b9ad2bb6859516928db0f98b740d8f72590 (diff) |
ClangRefactoring: Fix progress counter
We use threads now and the code had to be adapted.
Task-number: QTCREATORBUG-21950
Change-Id: Ie96c5bea1fa045588d0c5a8b18bfd1ccb5d9fdd9
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/libs')
-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; |