他的回复:
我们使用methord方式发送消息void CanDriver::CanMehodSend(sensors::candev::CanMessage& can_message){ // 入参判断 if (can_message.channel 0 || can_message.channel > CAN_NUM) { LOG(ERROR) "channel num error\n"; return; } if (m_proxy[can_message.channel] == nullptr) { LOG(ERROR) "channel proxy error\n"; return; } // Method组包 CanBusDataParam canDataParm; // LOG(INFO) "0"; struct Element canRawdata; static int canDemoData = 0; canRawdata.timeStamp.second = 0xFFFFFFFF; canRawdata.timeStamp.nsecond = 0xFFFFFFFF; canRawdata.canId = can_message.id; canRawdata.validLen = can_message.dlc; // Method下发方式,每包(vector)包含40帧 canDataParm.elementList.resize(1); canDataParm.elementList[0].data.resize(can_message.dlc); for (int i = 0; i can_message.dlc; i++) { canRawdata.data.push_back(can_message.data); } canDataParm.seq = 1; canDataParm.elementList[0] = canRawdata; auto handle = m_proxy[m_channelId]->CanDataSetMethod(canDataParm);}发送函数如下,每发送一条报文调用一次,resize后一次只发一条报文,conti radar 用,由5个线程向外发送消息,每线程20ms发送两条报文,发送一段时间后出现如上情况