fix deadlock

This commit is contained in:
lnk
2025-09-23 21:00:24 +08:00
parent b976795573
commit e997c88d82
5 changed files with 125 additions and 142 deletions

View File

@@ -341,40 +341,6 @@ void my_rocketmq_send(queue_data_t& data,rocketmq::RocketMQProducer* producer)
rocketmq_producer_send(producer,senddata,topic,tag,key);
}
/////////////////////////////////////////////////////////////////////////////////////////////////查找台账下标
// 根据终端 ID 查找 terminal_devlist 中的索引,找不到返回 -1
int find_dev_index_from_dev_id(const std::string& dev_id) {
std::lock_guard<std::mutex> lock(ledgermtx);
for (size_t i = 0; i < terminal_devlist.size(); ++i) {
if (terminal_devlist[i].terminal_id == dev_id) {
return static_cast<int>(i);
}
}
return -1; // 未找到
}
int find_mp_index_from_mp_id(const std::string& mp_id) {
std::lock_guard<std::mutex> lock(ledgermtx);
for (const auto& dev : terminal_devlist) {
for (size_t j = 0; j < dev.line.size(); ++j) {
if (dev.line[j].monitor_id == mp_id) {
return static_cast<int>(j); // 返回 line[] 的下标
}
}
}
return -1; // 未找到
}
std::string find_guid_index_from_dev_id(const std::string& dev_id) {
std::lock_guard<std::mutex> lock(ledgermtx);
for (size_t i = 0; i < terminal_devlist.size(); ++i) {
if (terminal_devlist[i].terminal_id == dev_id) {
return terminal_devlist[i].guid;
}
}
return ""; // 未找到
}
/////////////////////////////////////////////////////////////////////////////////////////////////回调函数的json处理
bool parseJsonMessageRT(const std::string& body,std::string& devSeries,ushort& line,bool& realData,bool& soeData,int& limit){
@@ -1489,7 +1455,7 @@ void rocketmq_test_rt(Front* front)//用来测试实时数据
queue_data_t data;
data.monitor_no = 123;
data.strTopic = std::string(FRONT_INST) + "_" + G_MQCONSUMER_TOPIC_RT;
data.strTopic = G_MQCONSUMER_TOPIC_RT;
std::ifstream file("rt.txt"); // 文件中存储长字符串
std::stringstream buffer;
buffer << file.rdbuf(); // 读取整个文件内容
@@ -1513,7 +1479,7 @@ void rocketmq_test_ud(Front* front)//用来测试台账更新
queue_data_t data;
data.monitor_no = 123;
data.strTopic = std::string(FRONT_INST) + "_" + G_MQCONSUMER_TOPIC_UD;
data.strTopic = G_MQCONSUMER_TOPIC_UD;
std::ifstream file("ud.txt"); // 文件中存储长字符串
std::stringstream buffer;
buffer << file.rdbuf(); // 读取整个文件内容
@@ -1537,7 +1503,7 @@ void rocketmq_test_set(Front* front)//用来测试进程控制脚本
queue_data_t data;
data.monitor_no = 123;
data.strTopic = std::string(FRONT_INST) + "_" + G_MQCONSUMER_TOPIC_SET;
data.strTopic = G_MQCONSUMER_TOPIC_SET;
std::ifstream file("set.txt"); // 文件中存储长字符串
std::stringstream buffer;
buffer << file.rdbuf(); // 读取整个文件内容
@@ -1561,7 +1527,7 @@ void rocketmq_test_rc(Front* front)//用来测试补招
queue_data_t data;
data.monitor_no = 123;
data.strTopic = std::string(FRONT_INST) + "_" + G_MQCONSUMER_TOPIC_RC;
data.strTopic = G_MQCONSUMER_TOPIC_RC;
std::ifstream file("rc.txt"); // 文件中存储长字符串
std::stringstream buffer;
buffer << file.rdbuf(); // 读取整个文件内容
@@ -1871,9 +1837,9 @@ bool parsemsg(const std::string& devid, const std::string& guid, const nlohmann:
}
//心跳和其他响应
void send_reply_to_cloud(int reply_code, const std::string& dev_id, int type) {
void send_reply_to_cloud(int reply_code, const std::string& dev_id, int type, const std::string& guid, const std::string& mac) {
try {
std::string guid = find_guid_index_from_dev_id(dev_id);
/*std::string guid = find_guid_index_from_dev_id(dev_id);*/
if(guid == "")
{
std::cerr << "dev: " << dev_id << " guid not found" << std::endl;
@@ -1887,8 +1853,8 @@ void send_reply_to_cloud(int reply_code, const std::string& dev_id, int type) {
obj["Node"] = g_front_seg_index;
// Dev_mac从台账取 addr_str 并规范化
std::string mac = get_mac_by_devid(dev_id);
obj["Dev_mac"] = mac;
//std::string mac = get_mac_by_devid(dev_id);
obj["Dev_mac"] = normalize_mac(mac);
// ---- 构造 Detail ----
nlohmann::json detail;