我最近买了一个新手机,运行Windows移动6.1专业。当然我正在做一些编码,在一个业余爱好基础。我的计划是要有一个运行的服务作为一个问题,通过载Services.exe.这需要收集som数据,并做som处理定期(每隔5-10分钟)。

因为我需要运行该每隔一定时间,它是一个有点问题对我来说,该系统通常去睡(暂停)后一个短期的不活动的用户。

我已经阅读的所有文件我能找到上MSDN,并MSDN博客的关于这个主题,并且它似乎对我来说,有三种可能的解决此问题:

  1. 保持该系统在一个"永远在"状态,通过调用 SystemIdleTimerReset 周期性。这似乎有点过分,因此出的问题。

  2. 有系统的周期性地唤醒了 CeRunAppAtTime, 和进入无人看管的状态,要做到我的处理。

  3. 使用的无人看管的状态,而不是去到一个完全中止。这将可以对用户透明的,但该系统不会去睡觉。

第二种办法似乎是首选的,然而,这将需要一个可执行被称为通过系统的上醒来,唯一的任务的通知我的服务,它应该开始处理。这似乎有点不必要的和我想避免这种额外的可执行的。我可以当然移动,我所有处理到这种额外的可执行,但我想使用的一些设施提供运行时,作为一个服务,并且也没有程序弹(即使其在该背景)每当处理开始。

乍一看,第三方似乎有同样的基本问题,因为第一个。但是,我读了一些MSDN博客,这就有可能实际上节省的电池耗用这种方法,而不是在出暂停模式经常(本论点是,性质的窗口管理平台是一个非常小的电池耗时的系统是空闲的。和那进进出出的暂停要求相当多的处理)。

所以我想我的问题如下:

  • 这种办法将你推荐我的情况?相对于保持最小的电池耗,并且一个干净的执行情况。

  • 在这种情况的办法二是它可以消除的必要通知可执行的?无论是通过替代API职能的或现有的通用应用程序的平台?

  • 在这种情况下的做法三号,你知道的任何信息/数据统计有关的权利要求,认为它是可能的延长电池寿命当使用人参与的模式进入暂停。E.g。你经常需要的系统出的暂停之前,无人参与的模式。

  • 执行特定(奖金)的问题:是否有必要经常通话 SystemIdleTimerReset 住在无人参与的模式?

最后,如果你想我们过早地淘汰的做法一号,请告诉我为什么。


请在你的反应是否是基于你的反应的知识,或者仅仅是猜测(后者也非常欢迎!).

请留下你的评论,如果你认为我需要澄清任何部分的这个问题。

有帮助吗?

解决方案

CERunAppAtTime是一个误解API(主要是因为可怕的名字)。它的 不不 需要运行一个应用程序。它可以简单地设置一个名为系统的活动(见本说明pwszAppName参数 在MSDN文档).如果你知道什么时候已经解雇了(纬度应用投入设备睡觉了时完成处理)只有一个工作主线是做一个WaitForSingleObject在同一命名活动。

无人看管的状态通常使用的设备的需要保持一个应用程序运行的连续(如MP3播放器),但节省的电力通过关闭背光灯(也许是最耗电子系统)。

显然人参与的模式的使用明显更多的压于暂停,因为在暂停的唯一动力绘制是为RAM自刷新。在无人参与的模式的处理器是stuill供电和运行(和几个外设可能过于-取决于如何OEM定义他们的人参与的模式)。

SystemIdleTimerReset简单地阻止了电力管理人将设备调入的低功率模式由于不活动。这个模式,是否暂停,无人看管,航班或其他定义是OEM。应谨慎使用,因为当你做的影响的电力消耗的装置。这样做的人参与的模式是尤其有问题,从用户的视角,因为他们可能会认为该装置被关闭(这看起来是这样),但现在他们的电池寿命已经南部。

其他提示

我有一个整体的长期后详细说明如何你不应该指望能够获得可接受的电池寿命,因为WM不是设计用来支持你们试图要做的, -你可以信号服务唤醒,做你的处理,然后使用的方法 这个职位 把设备回去睡觉。你的 应该 能够保持的比率在时间的睡眠时间非常低这种方式--但正如你所说,我只是猜测。

参见:

高功效的应用程序(MSDN)

权力的人 (开发人员1, 开发商2, 设备)

高功效的窗口管理应用程序(博客)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top