From 17cdd692071bb22dd0d56a422dd22946112181b5 Mon Sep 17 00:00:00 2001 From: Vladislav Ostapov Date: Tue, 6 May 2025 14:37:19 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81:=20=D0=B1=D0=B5=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D0=B5=D1=87=D0=BD=D0=BE=D0=B5=20=D0=BE=D0=B1?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=B5?= =?UTF-8?q?=D1=88=D0=B0=20=D0=B8=D0=B7-=D0=B7=D0=B0=20=D0=BE=D1=88=D0=B8?= =?UTF-8?q?=D0=B1=D0=BA=D0=B8=20=D0=B2=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA?= =?UTF-8?q?=D0=B5=20=D1=86=D0=B8=D0=BA=D0=BB=D0=B0=20=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/terminal_api_driver.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index 980219b..6a7052c 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -15,6 +15,8 @@ typedef boost::property_tree::ptree::path_type json_path; static constexpr const char* DEFAULT_QOS_CLASSES = R"({"rt1":[],"rt2":[],"rt3":[],"cd":[]})"; +// пороговое значение сна +static constexpr int64_t SLEEP_THRESHOLD = 10; // static int calculateSubnetMask(const std::string& subnet_mask) { // int mask = 0; @@ -463,7 +465,7 @@ private: bool checkNeedUpdate(int64_t now) const { if (periodMs < 0) return false; // тут нет смысла спать меньше чем на 20мс, поэтому можно разрешить чтение на некоторое время раньше - return now - lastUpdate >= (periodMs - 20); + return now - lastUpdate >= (periodMs - SLEEP_THRESHOLD); } int64_t getNextUpdate(int64_t now) const { @@ -543,17 +545,19 @@ private: auto now = TIME_NOW(); for (auto& u: updaters) { if (u.checkNeedUpdate(now)) { - // выравнивание таймингов (-20ms...+50ms) - if (u.lastUpdate + u.periodMs + 50 < now) { - u.lastUpdate += u.periodMs; + auto targetTime = u.lastUpdate + u.periodMs; + if (targetTime + SLEEP_THRESHOLD <= now && targetTime - SLEEP_THRESHOLD >= now) { + u.lastUpdate = targetTime; } else { u.lastUpdate = now; } + u.callback(); now = TIME_NOW(); } - - sleepTime = std::min(sleepTime, u.getNextUpdate(now)); + if (u.periodMs >= 0) { + sleepTime = std::min(sleepTime, u.getNextUpdate(now)); + } } if (sleepTime > 0) {