From 67710b224346b962fe2b53f84b7ab17c8ee52191 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 4 Jun 2015 19:52:37 +0200 Subject: all: pin computation threads to specific cores --- opentrack/thread.hpp | 37 +++++++++++++++++++++++++++++++++++++ opentrack/tracker.cpp | 3 +++ 2 files changed, 40 insertions(+) create mode 100644 opentrack/thread.hpp (limited to 'opentrack') diff --git a/opentrack/thread.hpp b/opentrack/thread.hpp new file mode 100644 index 00000000..f4e15c4e --- /dev/null +++ b/opentrack/thread.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include + +enum { + CORE_WORK = 1, + CORE_IPC = 0, +}; + +#ifdef _WIN32 +#include + +class Affinity { +public: + Affinity(int core = CORE_WORK) + { + DWORD_PTR ret = SetThreadAffinityMask(GetCurrentThread(), 1 << core); + if (ret == 0) + qDebug() << "SetThreadAffinityMask" << GetLastError(); + last = ret; + } + ~Affinity() + { + if (last) + (void) SetThreadAffinityMask(GetCurrentThread(), last); + } +private: + DWORD_PTR last; +}; + +#else +class Affinity { +public: + Affinity() {} + ~Affinity() {} +} +#endif diff --git a/opentrack/tracker.cpp b/opentrack/tracker.cpp index a9475838..1990d613 100644 --- a/opentrack/tracker.cpp +++ b/opentrack/tracker.cpp @@ -14,6 +14,7 @@ #include "tracker.h" +#include "opentrack/thread.hpp" #include #include @@ -183,6 +184,8 @@ void Tracker::logic() void Tracker::run() { const int sleep_ms = 3; + + Affinity thr(CORE_IPC); #if defined(_WIN32) (void) timeBeginPeriod(1); -- cgit v1.2.3