借助Boost Asio从RFC COMM快速读取数据

问题描述

我正在开发一个Qt应用程序,该应用程序应该通过蓝牙从设备读取数据。该设备在收到特定命令后,开始以2500字节/秒的频率发送数据。

很明显,我的第一种方法是使用Qt qry = { $or: [{ 'organizationId.name' : { $regex: name,$options : 'i' } },{ 'LeadDetailsId.firstName' : { $regex: name,$options: 'i' } },{ 'LeadDetailsId.lastName': { $regex: name,$options: 'i' },},{ 'assignedBy.name' : { $regex: name,{ 'assignedTo.name': { $regex: name,{ 'leadProgramId.name': { $regex: name,$options: 'i' } }] }; let leads = await lead.aggregate([ { $lookup: { from: "401organizations",localField: "organizationId",foreignField: "_id",as: "organizationId" } },{ $unwind: { path: '$organizationId' } },{ $lookup: { from: "401leaddetails",localField: "LeadDetailsId",as: "LeadDetailsId" } },{ $unwind: {path: '$LeadDetailsId'}},{ $lookup: { from: "401leadactivityhistories",localField: "_id",foreignField: "leadId",as: "activityHistoryId" } },{ $lookup: { from: "401leadstatuses",localField: "status",as: "status" } },{ $unwind: {path: '$status'}},localField: "subStatus",as: "subStatus" } },{$unwind: {path: "$subStatus"}},{ $lookup: { from: "401staffs",localField: "assignedBy",as: "assignedBy" } },{ $unwind: {path: '$assignedBy'}},localField: "assignedTo",as: "assignedTo" } },{$unwind: {path: "$assignedTo"}},{ $lookup: { from: "401leadappointments",foreignField: "LeadId",as: "appointmentId" } },{ $lookup: { from: '401leadprograms',localField: "leadProgramId",as: "leadProgramId" } },{ $unwind: {path: "$leadProgramId"}},{$match: { ...qry,isDeleted: false }} ]); 类,该类具有良好的信号和时隙机制,因此每次发送QBluetoothSocket信号时我都可以读取数据。问题在于Qt的实现接收数据的速度非常慢,而我的应用程序的要求之一就是从接收到的数据中绘制实时图形,因此这是不可接受的。

结果是,我不得不不断地等待即将到来的数据,并且随着时间的推移,绘图工作会滞后很多。因此,我开始寻找另一种解决方案,现在我正尝试使用boost asio串行端口库来读取rfcomm。但是我不确定该怎么做。 现在,我设法与rfcomm建立连接并发送命令:

readyRead()

接下来我应该做的是重复读取数据并且没有阻塞,因此我应该使用auto bytes_written = boost::asio::write(port,boost::asio::buffer(command.c_str(),command.size())); ,在回调方法中我应该获取数据并再次使用async_read_some()直到传输停止?我是朝着这个方向迈进还是有更好的方法

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)