异步事件引起的plugins crash问题

 

 

编写了一个 基于QtWebkit 的MediaPlayer plugin,

在实现切换当前播放页面到其它页面时就停止播放的功能时, plugins 发生了crash。

停止播放功能实在onUnload()的时候实现的,javascript代码如下:

 

function unload()
{

    var mp = document.getElementById('mp');
   
    mp.stop();
   
}

stop本地实现很简单, 就调用了一条语句:
MP_stop(MPinst);
MP_stop()是播放器提供的停止接口函数。
 
怎么简单的操作怎么会引起crash呢? 难道是onLoad()的时候插件'mp'已经被销毁了,
应该不是, 因为onLoad是发生在页面重新加载前的,老的东西还在。
问题应该出在 plugin的实现上面, 在stop后还有故事...
故事是这样的, 在开始播放的时候注册了一个事件回调函数, 底层停止播放的时候,就会
上报一个事件, 这个事件在插件的外部函数被回调上来, 然后该回调函数去调用插件对象的
上报函数执行javascript脚本语句。
 
问题应该是出在这个回调函数里面, 应该这个是异步的, 在事件上报的时候, 该plugin对象
已经被破坏了....
 
于是在plugin的析构函数中加了调试信息, 果然, 在事件
上报之前, 已经析构了, 自然在事件回调函数上报以后,就不能再去操作plugin了。
 
操作之前要判断下这个plugin还存不存在。
 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值