当前位置: 代码迷 >> WinCE >> WINCE6.0系统挂起时没有等APP处理完就挂起的有关问题
  详细解决方案

WINCE6.0系统挂起时没有等APP处理完就挂起的有关问题

热度:592   发布时间:2016-04-28 11:51:50.0
WINCE6.0系统挂起时没有等APP处理完就挂起的问题
大家好,我们是WINCE6.0系统,开机后自动运行一个APP,此APP如果收到挂起的消息,如果当前系统已将连接了3G,则先断开3G连接,可是经过测试发现,系统并没有等到断开3G连接的动作完成之后就挂起了。如何才能保证让这个动作执行完,设备才挂起,在这里请教大家了,先谢谢。
------解决思路----------------------
既然APP能收到消息,那么系统不处理这个消息,又APP处理完自己的事物,然后APP执行挂起的动作。缺点是这个系统如果没有这只app将不会挂起。不过简单。

改进一下,定义个一个带名字的互斥量或者事件什么都行,又APP创建,然后系统收到挂起信息,先判断这个[事件]是否有存在,存在表示APP已经运行,你就像等待APP处理完自己的事务,然后给这个[事件]一个信号,这样系统收到信号再挂起。适当设定一个超时的时间,app没给信号也挂起,这样或许更合理一些。
------解决思路----------------------
如果如 LZ 你所说,依赖于系统的机制无法达到目标,就只能自己来实现。
例如:在发送挂起消息前,可以先通过 SendMessage 发送消息到 App,然后再执行挂起。这样 App 在接收到 SendMessage 的消息后就断开 3G!
虽然,这样做不好:从驱动或系统直接向某个 App 发消息是不推荐的。但是可以实现系统本身无法实现的问题。

------解决思路----------------------
引用:
既然APP能收到消息,那么系统不处理这个消息,又APP处理完自己的事物,然后APP执行挂起的动作。缺点是这个系统如果没有这只app将不会挂起。不过简单。

改进一下,定义个一个带名字的互斥量或者事件什么都行,又APP创建,然后系统收到挂起信息,先判断这个[事件]是否有存在,存在表示APP已经运行,你就像等待APP处理完自己的事务,然后给这个[事件]一个信号,这样系统收到信号再挂起。适当设定一个超时的时间,app没给信号也挂起,这样或许更合理一些。

觉得这个方式可以实现,O(∩_∩)O~,偶尔还是要来wince论坛看看的。
------解决思路----------------------
按道理说系统suspend API应该会提供系统事件处理完成再挂起的功能,如果真的没有就只能自己实现了,修改suspend机制
  相关解决方案