首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PocketPC上运行后台服务

在PocketPC上运行后台服务
EN

Stack Overflow用户
提问于 2009-01-11 18:03:36
回答 2查看 1.5K关注 0票数 5

我最近给自己买了一部新手机,运行WindowsMobile6.1Professional。当然,我目前正在为它做一些编码,这是我的业余爱好。我的计划是让服务以DLL的形式运行,由Services.exe加载。这需要收集som数据,并定期进行som处理(每5-10分钟)。

由于我需要定期运行这个程序,这对我来说是个小问题,系统通常会在用户短暂的无活动状态下进入休眠状态(暂停)。

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

  1. 通过定期调用SystemIdleTimerReset,将系统保持在“始终打开”-state中。这似乎有点过分,因此是不可能的。
  2. 让系统定期使用CeRunAppAtTime,唤醒并进入无人值守状态,以完成我的处理。
  3. 使用无人值守状态,而不是进入完全暂停状态。这对用户来说是透明的,但是系统永远不会进入睡眠状态。

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

乍一看,第三种方法似乎有着与第一种相同的基本问题。然而,我在一些MSDN博客上读到,使用这种方法可能实际上可以节省电池消耗,而不是经常进出挂起模式(其中的论点是,WM平台的本质是在系统空闲时消耗很少的电池。而进出暂停需要相当多的处理)。

所以我想我的问题如下:

  • 在我的情况下,你会推荐哪种方法?关于保持最小的电池消耗,和一个很好的清洁的实现。
  • 在第二种方法中,是否有可能消除通知可执行文件的需要?或者通过其他API函数,还是通过平台上现有的通用应用程序?
  • 在第三种方法中,您是否知道与此声明相关的任何信息/统计数据,即当使用无人值守模式而不是进入暂停状态时,可以延长电池寿命。例如,在无人值守模式成为首选之前,您需要多久才能将系统从挂起中提取出来。
  • 实现特定(额外)问题:是否有必要定期打电话给SystemIdleTimerReset以保持无人值守的状态?

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

请在你的回复中包括你的回应是基于知识,还是仅仅是猜测(后者也很受欢迎!)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-01-11 20:48:51

CERunAppAtTime是一个非常误解的API (主要是因为这个糟糕的名字)。它不需要运行应用程序。它可以简单地设置一个命名的系统事件(请参阅pwszAppName参数在MSDN文档中的描述)。如果你想知道它是什么时候启动的(让你的应用程序在完成处理后再让设备进入睡眠状态),只需让一个工作线程对同一个命名的事件执行一个WaitForSingleObject。

无人值守状态通常用于需要保持应用程序连续运行的设备(如MP3播放器),但通过关闭背光(可能是最耗电的子系统)来节省电源。

显然无人值守模式比挂起使用更多的功率,因为在挂起中唯一的功率图是用于RAM自刷新。在无人值守模式下,处理器是工作、供电和运行的(一些外围设备也可能也是如此--取决于OEM如何定义它们无人值守的模式)。

SystemIdleTimerReset只是防止电源管理器由于不活动而使设备进入低功耗模式。这种模式,无论是暂停,无人值守,飞行或其他,是由OEM定义的。谨慎使用它,因为当你这样做时,它会影响设备的耗电量。从用户的角度来看,在无人值守模式下这样做尤其有问题,因为他们可能会认为设备关机(看起来是这样的),但现在他们的电池寿命已经下降了。

票数 6
EN

Stack Overflow用户

发布于 2009-01-15 17:27:38

我发了一篇很长的文章,详细描述了你不应该期望能得到可以接受的电池寿命,因为WM不是为了支持你想要做的事情而设计的,但是--你可以在唤醒时发出信号,进行处理,然后使用这个职位中的方法使设备立即恢复休眠。你应该可以把准时睡眠时间的比率保持在很低的水平,但正如你所说的,我只是猜测。

另请参阅:

节能应用程序(MSDN)

赋予人民的权力 (开发人员1开发人员2设备)

高效的WM应用程序(博客文章)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/433325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档