小编Sim*_*sen的帖子

在PocketPC上运行后台服务

我最近给自己买了一部新手机,运行Windows Mobile 6.1 Professional.当然,我目前正在考虑做一些编码,基于业余爱好.我的计划是将服务作为DLL运行,由Services.exe加载.这需要收集som数据,并定期(每5-10分钟)进行一次som处理.

由于我需要定期运行,因此对我来说这是一个问题,系统通常会在用户短暂不活动后进入休眠状态(暂停).

我一直在阅读我在MSDN上找到的所有文档,以及有关此主题的MSDN博客,在我看来,这个问题有三种可能的解决方案:

  1. 通过定期调用SystemIdleTimerReset将系统保持在"Always On"状态.这似乎有点过分,因此是不可能的.

  2. 让系统定期用CeRunAppAtTime唤醒,并进入无人值守状态,进行处理.

  3. 使用无人参与状态而不是进入完全暂停状态.这对用户来说是透明的,但系统永远不会进入睡眠状态.

第二种方法似乎是首选,但是,这需要系统在唤醒时调用可执行文件,唯一的任务是通知我的服务它应该开始处理.这似乎有点不必要,我想避免这个额外的可执行文件.我当然可以将我的所有处理都移到这个额外的可执行文件中,但我想使用在作为服务运行时提供的一些功能,并且在处理开始时也没有弹出程序(即使它在后台).

乍一看,第三种方法似乎与第一种方法具有相同的基本问题.但是,我已经阅读了一些MSDN博客,可能通过这种方法实际节省电池消耗,而不是经常进入和退出挂起模式(对此的论点是WM平台的性质是当系统处于空闲状态时,电池消耗非常少.进出暂停需要相当多的处理.

所以我想我的问题如下:

  • 在我的情况下,你会推荐哪种方法?关于保持最低电池消耗,以及良好的清洁实施.

  • 在第二种方法的情况下,是否可以消除对通知可执行文件的需求?通过替代API函数或平台上现有的通用应用程序?

  • 在第三种方法的情况下,您是否知道与索赔相关的任何信息/统计数据,在使用无人值守模式进入暂停状态时可以延长电池寿命.例如,在首选无人值守模式之前,您需要多长时间将系统拉出挂起状态.

  • 具体实施(奖金)问题:是否有必要定期调用SystemIdleTimerReset以保持无人值守模式?

最后,如果您认为我过早地排除了第一种方法,请告诉我原因.


请在您的回复中包括您的回答是基于知识,还是仅仅是猜测(后者也非常受欢迎!).

如果您认为我需要澄清此问题的任何部分,请发表评论.

c++ winapi pocketpc windows-mobile

5
推荐指数
1
解决办法
1431
查看次数

标签 统计

c++ ×1

pocketpc ×1

winapi ×1

windows-mobile ×1