做蓝牙开发时,遇到这个问题,困扰了好久,这个问题是随机出现的。
搜索某个设备的服务时,需创建一个CSdpAgent对象:CSdpAgent::NewL( MSdpAgentNotifier&, TBTDevAddr );
先前的做法是创建前判断
if(iAgent != NULL)
{
iAgent->Cancel();
delete iAgent;
iAgent=NULL;
}
并且每次出错,也是在这个地方,我猜测是,iAgent->Cancel()后,可能还在查找服务,delete时就出现了 kern-exec3,后来改为下面的方式就没问题了:
RPointerArray<CSdpAgent> iAgents;
CSdpAgent* agent = CSdpAgent::NewLC( *this, iDevData->iDeviceAddr );
iAgents.Append(agent);
查找完 iAgents.ResetAndDestroy();
本文介绍蓝牙开发过程中遇到的随机问题:在搜索特定设备的服务时出现的kern-exec3错误。通过调整CSdpAgent对象的管理方式,使用RPointerArray替代单一指针管理,解决了对象删除时的潜在并发问题。
9148

被折叠的 条评论
为什么被折叠?



