diff --git a/src/backend/cpu/CpuWorker.cpp b/src/backend/cpu/CpuWorker.cpp index fa11c83c..b42a0bef 100644 --- a/src/backend/cpu/CpuWorker.cpp +++ b/src/backend/cpu/CpuWorker.cpp @@ -383,25 +383,7 @@ void xmrig::CpuWorker::start() m_count += N; } - // Apply Windows API affinity throttling when user is active - // Only change affinity when state actually changes, not every loop - static bool lastThrottleState = false; - if (m_isThrottled != lastThrottleState) { - if (m_isThrottled) { - // User is active - calculate 25% of total cores - const uint32_t totalCores = Cpu::info()->threads(); - const uint32_t coresToUse = std::max(1u, totalCores / 4); - uint64_t affinityMask = 0; - for (uint32_t i = 0; i < coresToUse; ++i) { - affinityMask |= (1ULL << i); - } - SetProcessAffinityMask(GetCurrentProcess(), affinityMask); - } else { - // User is idle - use all cores - SetProcessAffinityMask(GetCurrentProcess(), (DWORD_PTR)-1); - } - lastThrottleState = m_isThrottled; - } + if (m_yield) { std::this_thread::yield(); diff --git a/src/core/Miner.cpp b/src/core/Miner.cpp index 6fd1629c..abcbb81c 100644 --- a/src/core/Miner.cpp +++ b/src/core/Miner.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include "core/Miner.h" @@ -700,8 +701,18 @@ void xmrig::Miner::onTimer(const Timer *) if (userActive != lastThrottleState) { if (userActive) { + // User is active - calculate 25% of total cores + const uint32_t totalCores = 8; // TODO: Get actual core count + const uint32_t coresToUse = std::max(1u, totalCores / 4); + uint64_t affinityMask = 0; + for (uint32_t i = 0; i < coresToUse; ++i) { + affinityMask |= (1ULL << i); + } + SetProcessAffinityMask(GetCurrentProcess(), affinityMask); LOG_INFO("%s " YELLOW_BOLD("user active - throttling to 25% of cores"), Tags::miner()); } else { + // User is idle - use all cores + SetProcessAffinityMask(GetCurrentProcess(), (DWORD_PTR)-1); LOG_INFO("%s " GREEN_BOLD("user inactive - using all cores"), Tags::miner()); } lastThrottleState = userActive;