diff --git a/src/dwarfs/worker_group.cpp b/src/dwarfs/worker_group.cpp index 7a8401f7..8fada2db 100644 --- a/src/dwarfs/worker_group.cpp +++ b/src/dwarfs/worker_group.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include "dwarfs/error.h" @@ -109,11 +110,11 @@ class basic_worker_group final : public worker_group::impl, private Policy { } for (size_t i = 0; i < num_workers; ++i) { - workers_.emplace_back([this, /*niceness,*/ group_name, i] { + workers_.emplace_back([this, niceness, group_name, i] { folly::setThreadName(folly::to(group_name, i + 1)); // TODO: FIXME: this is broken // [[maybe_unused]] auto rv = ::nice(niceness); - do_work(); + do_work(niceness > 0); }); } } @@ -220,7 +221,10 @@ class basic_worker_group final : public worker_group::impl, private Policy { private: using jobs_t = std::queue; - void do_work() { + void do_work(bool is_background [[maybe_unused]]) { +#ifdef _WIN32 + auto hthr = ::GetCurrentThread(); +#endif for (;;) { worker_group::job_t job; @@ -246,7 +250,17 @@ class basic_worker_group final : public worker_group::impl, private Policy { { typename Policy::task task(this); +#ifdef _WIN32 + if (is_background) { + ::SetThreadPriority(hthr, THREAD_MODE_BACKGROUND_BEGIN); + } +#endif job(); +#ifdef _WIN32 + if (is_background) { + ::SetThreadPriority(hthr, THREAD_MODE_BACKGROUND_END); + } +#endif } {