From f7e676a87a06a70def1f58c380d640c0ff8f3601 Mon Sep 17 00:00:00 2001 From: GuanYuankai Date: Wed, 15 Oct 2025 14:34:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9modbus-rtu=E8=BD=AE=E8=AF=A2?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=EF=BC=8C=E8=AE=A9=E4=BB=96=E4=B8=8D=E5=9C=A8?= =?UTF-8?q?=E9=98=BB=E5=A1=9E=E7=BB=88=E6=AD=A2=E4=BF=A1=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 1 + docker/Dockerfile | 10 ++++------ src/modbus/modbus_rtu_poller_service.cc | 9 ++++++++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 449e6d6..2c5d31f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,6 +96,7 @@ target_link_libraries(edge_proxy PRIVATE # ================================================================= add_executable(test src/test.cc + src/SQL/data_storage.cc ) diff --git a/docker/Dockerfile b/docker/Dockerfile index 36e09b2..5adbacf 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -74,15 +74,13 @@ RUN cd /tmp/build-context/external/paho.mqtt.c && \ # 在所有 apt 操作完成后,最后进行清理 rm -rf /var/lib/apt/lists/* COPY piper_models/ /app/piper_models/ - +# 5. 设置默认用户 +# ================================= +# 容器的默认用户将是 'dev' +USER dev RUN pip install --no-cache-dir --user piper-tts # 将 ~/.local/bin (包含 piper 二进制文件) 添加到 PATH RUN echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bash_profile # 现在,dev 用户可以使用 `piper` 命令了,只要 shell 环境被正确加载。 # 我们可以将最终的 CMD 设置为加载环境然后执行一个命令,或者留空让用户交互。 -# 5. 设置默认用户 -# ================================= -# 容器的默认用户将是 'dev' -USER dev - diff --git a/src/modbus/modbus_rtu_poller_service.cc b/src/modbus/modbus_rtu_poller_service.cc index e888014..3bbc486 100644 --- a/src/modbus/modbus_rtu_poller_service.cc +++ b/src/modbus/modbus_rtu_poller_service.cc @@ -92,7 +92,14 @@ void ModbusRtuPollerService::run() { } // 在本线程中等待,不影响主线程的事件循环 - std::this_thread::sleep_for(std::chrono::milliseconds(m_config.poll_interval_ms)); + auto wake_up_time = std::chrono::steady_clock::now() + std::chrono::milliseconds(m_config.poll_interval_ms); + while (std::chrono::steady_clock::now() < wake_up_time) { + if (m_stop_flag) { + break; + } + // 每次只“打盹”100毫秒 + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } } // 线程退出前关闭串口