diff --git a/src/base/kernel/Platform.h b/src/base/kernel/Platform.h index fe39a69e..3f026f8b 100644 --- a/src/base/kernel/Platform.h +++ b/src/base/kernel/Platform.h @@ -51,6 +51,7 @@ public: static uint32_t setTimerResolution(uint32_t resolution); static void init(const char *userAgent); static void restoreTimerResolution(); + static void setProcessPriority(int priority); static void setThreadPriority(int priority); static inline const char *userAgent() { return m_userAgent; } diff --git a/src/base/kernel/Platform_mac.cpp b/src/base/kernel/Platform_mac.cpp index 8d9bac3b..2cd3a831 100644 --- a/src/base/kernel/Platform_mac.cpp +++ b/src/base/kernel/Platform_mac.cpp @@ -83,6 +83,11 @@ void xmrig::Platform::restoreTimerResolution() } +void xmrig::Platform::setProcessPriority(int) +{ +} + + void xmrig::Platform::setThreadPriority(int priority) { if (priority == -1) { diff --git a/src/base/kernel/Platform_unix.cpp b/src/base/kernel/Platform_unix.cpp index b6ca17e4..f449995c 100644 --- a/src/base/kernel/Platform_unix.cpp +++ b/src/base/kernel/Platform_unix.cpp @@ -111,6 +111,11 @@ void xmrig::Platform::restoreTimerResolution() } +void xmrig::Platform::setProcessPriority(int) +{ +} + + void xmrig::Platform::setThreadPriority(int priority) { if (priority == -1) { diff --git a/src/base/kernel/Platform_win.cpp b/src/base/kernel/Platform_win.cpp index ad93cb6a..064c8352 100644 --- a/src/base/kernel/Platform_win.cpp +++ b/src/base/kernel/Platform_win.cpp @@ -131,6 +131,43 @@ void xmrig::Platform::restoreTimerResolution() } +void xmrig::Platform::setProcessPriority(int priority) +{ + if (priority == -1) { + return; + } + + DWORD prio = IDLE_PRIORITY_CLASS; + switch (priority) + { + case 1: + prio = BELOW_NORMAL_PRIORITY_CLASS; + break; + + case 2: + prio = NORMAL_PRIORITY_CLASS; + break; + + case 3: + prio = ABOVE_NORMAL_PRIORITY_CLASS; + break; + + case 4: + prio = HIGH_PRIORITY_CLASS; + break; + + case 5: + prio = REALTIME_PRIORITY_CLASS; + break; + + default: + break; + } + + SetPriorityClass(GetCurrentProcess(), prio); +} + + void xmrig::Platform::setThreadPriority(int priority) { if (priority == -1) { diff --git a/src/core/Miner.cpp b/src/core/Miner.cpp index ed988f26..bea66d71 100644 --- a/src/core/Miner.cpp +++ b/src/core/Miner.cpp @@ -262,6 +262,7 @@ xmrig::Miner::Miner(Controller *controller) { const int priority = controller->config()->cpu().priority(); if (priority >= 0) { + Platform::setProcessPriority(priority); Platform::setThreadPriority(std::min(priority + 1, 5)); }