diff options
| author | Dan Engelbrecht <[email protected]> | 2025-06-05 14:40:02 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-06-05 14:40:02 +0200 |
| commit | 40b9386054de3c23f77da74eefaa743240d164fd (patch) | |
| tree | 9c4448f86d1df00b3d0f5d5dd94506bca8c067d9 /src/zenutil/parallelwork.cpp | |
| parent | revert system temp dir for builds upload (#422) (diff) | |
| download | zen-40b9386054de3c23f77da74eefaa743240d164fd.tar.xz zen-40b9386054de3c23f77da74eefaa743240d164fd.zip | |
pause, resume and abort running builds cmd (#421)
- Feature: `zen builds pause`, `zen builds resume` and `zen builds abort` commands to control a running `zen builds` command
- `--process-id` the process id to control, if omitted it tries to find a running process using the same executable as itself
- Improvement: Process report now indicates if it is pausing or aborting
Diffstat (limited to 'src/zenutil/parallelwork.cpp')
| -rw-r--r-- | src/zenutil/parallelwork.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/zenutil/parallelwork.cpp b/src/zenutil/parallelwork.cpp index ecacc4b5a..67fc03c04 100644 --- a/src/zenutil/parallelwork.cpp +++ b/src/zenutil/parallelwork.cpp @@ -14,7 +14,10 @@ namespace zen { -ParallelWork::ParallelWork(std::atomic<bool>& AbortFlag) : m_AbortFlag(AbortFlag), m_PendingWork(1) +ParallelWork::ParallelWork(std::atomic<bool>& AbortFlag, std::atomic<bool>& PauseFlag) +: m_AbortFlag(AbortFlag) +, m_PauseFlag(PauseFlag) +, m_PendingWork(1) { } @@ -59,7 +62,7 @@ ParallelWork::Wait(int32_t UpdateIntervalMS, UpdateCallback&& UpdateCallback) while (!m_PendingWork.Wait(UpdateIntervalMS)) { - UpdateCallback(m_AbortFlag.load(), m_PendingWork.Remaining()); + UpdateCallback(m_AbortFlag.load(), m_PauseFlag.load(), m_PendingWork.Remaining()); } RethrowErrors(); @@ -111,7 +114,8 @@ ParallelWork::RethrowErrors() TEST_CASE("parallellwork.nowork") { std::atomic<bool> AbortFlag; - ParallelWork Work(AbortFlag); + std::atomic<bool> PauseFlag; + ParallelWork Work(AbortFlag, PauseFlag); Work.Wait(); } @@ -120,7 +124,8 @@ TEST_CASE("parallellwork.basic") WorkerThreadPool WorkerPool(2); std::atomic<bool> AbortFlag; - ParallelWork Work(AbortFlag); + std::atomic<bool> PauseFlag; + ParallelWork Work(AbortFlag, PauseFlag); for (uint32_t I = 0; I < 5; I++) { Work.ScheduleWork(WorkerPool, [](std::atomic<bool>& AbortFlag) { CHECK(!AbortFlag); }); @@ -133,7 +138,8 @@ TEST_CASE("parallellwork.throws_in_work") WorkerThreadPool WorkerPool(2); std::atomic<bool> AbortFlag; - ParallelWork Work(AbortFlag); + std::atomic<bool> PauseFlag; + ParallelWork Work(AbortFlag, PauseFlag); for (uint32_t I = 0; I < 10; I++) { Work.ScheduleWork(WorkerPool, [I](std::atomic<bool>& AbortFlag) { @@ -158,7 +164,8 @@ TEST_CASE("parallellwork.throws_in_dispatch") try { std::atomic<bool> AbortFlag; - ParallelWork Work(AbortFlag); + std::atomic<bool> PauseFlag; + ParallelWork Work(AbortFlag, PauseFlag); for (uint32_t I = 0; I < 5; I++) { Work.ScheduleWork(WorkerPool, [I, &ExecutedCount](std::atomic<bool>& AbortFlag) { |