WINCE6.0+2443系统大概过10分钟进入sleep状态

最近在开发基于WINCE6.0+2443GPS产品的时候,发现我的机器在电池供电的时候,开机之后,如果没有其他动作,那么大概10分钟左右,我的系统会进入sleep的状态,后来发现我在实现电池驱动的时候把函数BatteryPDDGetStatus()下面部分注释掉了

 memcpy(pstatus, &gpStatus->sps, sizeof(*pstatus));

    *pfBatteriesChangedSinceLastCall = gpStatus->fChanged;

    if(*pfBatteriesChangedSinceLastCall) {

        gpStatus->fChanged = FALSE; // reset changed flag if it's set

}

为什么注释了上面这部分代码就会出现这个问题了,我们来看看电池驱动MDDBatteryAPIGetSystemPowerStatusEx2()的定义:

上图的第117行用来判断系统当前状态是否有AC供电还是电池供电,目前我还没有完全搞清楚为什么是AC供电的情况下,系统就不会进入sleep,我想是和上图中调用的BatteryAPIStopwatch()函数有很大的关系。我后来在BatteryPDDGetStatus()函数返回之前加了下面这句:

pstatus->ACLineStatus =AC_LINE_ONLINE;

这样即使是在电池供电的情况下(这时候,是我做了个假动作来告诉BatteryAPIGetSystemPowerStatusEx2()函数:系统一直是AC供电),这就证明了在AC供电的情况下系统不会进入sleep状态,但到底是为什么呢?有待于后面去彻底搞清楚了,如果大家知道的,麻烦大家告知。

上面提到说加pstatus->ACLineStatus =AC_LINE_ONLINE;这行语句可以不让系统进入sleep,但对于一个需要电池供电的产品来说是不能这样解决这个问题的,因为应用程序需要根据pstatus->ACLineStatus来判断当前是否在充电,以便告诉用户的充电状态。后来经过上网查资料和CSDN各位高手的指点,我在BatteryPDDGetStatus()函数返回之前加入了下面的代码就解决了这个问题:

我为什么加了if(NoEnterSleepStatus >= 50)这个判断呢,就是不想每次调用(隔5s调用一次)BatteryPDDGetStatus()函数的时候就去执行上面的动作,只要赶在系统进入sleep之间timeout之前调用了上面的代码就可以阻止系统进入sleep状态。

在这里有个疑问,网上有很多网友说通过定时调用SystemIdleTimerReset()函数也可以阻止系统进入sleep状态,但我在上面的位置加了下面的代码后也无法阻止系统进入sleep状态,很奇怪,希望知者告知,谢谢啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值