last_msg_time_ 变量在多线程环境下没有同步保护
This commit is contained in:
parent
a5aef93432
commit
c928d5f225
@ -131,7 +131,13 @@ class RemoteCtrlNode : public rclcpp::Node
|
|||||||
auto now = std::chrono::steady_clock::now();
|
auto now = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
// 超时阈值:建议 800ms ~ 1500ms
|
// 超时阈值:建议 800ms ~ 1500ms
|
||||||
if (now - last_msg_time_ > 800ms)
|
std::chrono::steady_clock::time_point last;
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(last_msg_time_mtx_);
|
||||||
|
last = last_msg_time_;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (now - last > 800ms)
|
||||||
{
|
{
|
||||||
// 只在第一次进入“失活”时打印日志
|
// 只在第一次进入“失活”时打印日志
|
||||||
if (remote_alive_.exchange(false))
|
if (remote_alive_.exchange(false))
|
||||||
@ -286,7 +292,10 @@ class RemoteCtrlNode : public rclcpp::Node
|
|||||||
LOG_INFO("[REMOTE] ✓ control recovered");
|
LOG_INFO("[REMOTE] ✓ control recovered");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(last_msg_time_mtx_);
|
||||||
last_msg_time_ = std::chrono::steady_clock::now();
|
last_msg_time_ = std::chrono::steady_clock::now();
|
||||||
|
}
|
||||||
|
|
||||||
LOG_DEBUG("[REMOTE] Processing command: %s", cmd.c_str());
|
LOG_DEBUG("[REMOTE] Processing command: %s", cmd.c_str());
|
||||||
|
|
||||||
@ -399,6 +408,7 @@ class RemoteCtrlNode : public rclcpp::Node
|
|||||||
std::atomic<bool> remote_authorized_{false}; // 是否允许远控(锁存)
|
std::atomic<bool> remote_authorized_{false}; // 是否允许远控(锁存)
|
||||||
std::atomic<bool> remote_alive_{false}; // 是否活跃(心跳)
|
std::atomic<bool> remote_alive_{false}; // 是否活跃(心跳)
|
||||||
std::chrono::steady_clock::time_point last_msg_time_;
|
std::chrono::steady_clock::time_point last_msg_time_;
|
||||||
|
std::mutex last_msg_time_mtx_; // 保护 last_msg_time_
|
||||||
|
|
||||||
float current_feedback_angle_{0.0f};
|
float current_feedback_angle_{0.0f};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user