在 PocketPC 上运行后台服务

2024-03-15

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

由于我需要定期运行它,这对我来说有点问题,系统通常会在用户短暂不活动后进入睡眠(挂起)状态。

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

  1. 通过调用使系统保持“始终开启”状态系统空闲计时器重置定期。这似乎有点过分,因此是不可能的。

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

  3. 使用无人值守状态而不是进入完全挂起状态。这对用户来说是透明的,但系统永远不会进入睡眠状态。

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

乍一看,第三种方法似乎与第一种方法具有相同的基本问题。然而,我在一些 MSDN 博客上读到,通过这种方法实际上可以节省电池消耗,而不是经常进入和退出挂起模式(对此的论点是 WM 平台的本质是当系统空闲时,电池消耗非常少。并且进入和退出挂起需要相当多的处理)。

所以我想我的问题如下:

  • 对于我的情况,您会推荐哪种方法?关于保持最低电池消耗和良好干净的实施。

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

  • 在第三种方法的情况下,您是否知道与该声明相关的任何信息/统计数据,即使用无人值守模式而不是进入挂起状态时可以延长电池寿命。例如。在首选无人值守模式之前,您需要多久使系统脱离挂起状态。

  • 实施特定(奖励)问题:是否有必要定期致电系统空闲计时器重置保持无人值守模式?

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


请在您的回复中注明您的回复是基于知识还是仅仅是猜测(也非常欢迎后者!)。

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


CERunAppAtTime 是一个经常被误解的 API(主要是因为名字很糟糕)。它doesn't必须运行一个应用程序。它可以简单地设置一个命名的系统事件(参见pwszAppName参数的描述在 MSDN 文档中 http://msdn.microsoft.com/en-us/library/aa932775.aspx)。如果您想知道它何时触发(以便您的应用程序在处理完成后再次将设备置于睡眠状态),只需有一个工作线程在同一命名事件上执行 WaitForSingleObject 即可。

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

显然,无人值守模式比挂起模式使用更多的电量,因为在挂起模式下,唯一的功耗是 RAM 自刷新。在无人值守模式下,处理器仍然供电并运行(一些外设也可能如此 - 取决于 OEM 如何定义其无人值守模式)。

SystemIdleTimerReset 只是防止电源管理器因不活动而将设备置于低功耗模式。这种模式,无论是暂停、无人值守、飞行还是其他,都是由 OEM 定义的。请谨慎使用它,因为这样做会影响设备的功耗。从用户的角度来看,在无人值守模式下执行此操作尤其成问题,因为他们可能认为设备已关闭(看起来是这样),但现在他们的电池寿命已经缩短。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PocketPC 上运行后台服务 的相关文章

  • 编写此代码片段的有效方法是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 更有效和 或更短地重写此代码以节省字节并显得不那么冗长的方法 if N 2 0 N 6 N 8 N 10 N 12 N 14 N 16 N
  • 是否可以从 C++ 应用程序调用 C# 应用程序?

    我是一名编程学生 现在我已经上了两门 C 课程 这个学期我将参加我的第一门 C 课程 出于好奇 是否可以从 C 应用程序调用 C 应用程序 如果是的话 是否还可以检查运行该程序的计算机是否具有 NET框架 我只是很好奇 我想如果可能的话 这
  • 无法将 std::min 传递给函数,std::min 的副本有效

    Passing std min函数无法编译 我复制了 libcpp 声明std min进入我的源文件并且它可以工作 std 版本有什么问题 clang 和 gcc 也会发生同样的情况 在 Godbolt 上测试 https godbolt
  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • 使用 C# 中的 Google 地图 API 和 SSIS 包获取行驶距离

    更新 找到了谷歌距离矩阵并尝试相应地修改我的代码 我在这里收到无效参数错误 return new GeoLocation dstnc uri ToString catch return new GeoLocation 0 0 https 基
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • 将错误代码映射到 C++ 中的字符串

    将错误代码从枚举映射到字符串的更有效方法是什么 在 C 中 例如 现在我正在做这样的事情 std string ErrorCodeToString enum errorCode switch errorCode case ERROR ONE
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • Xamarin.Forms UWP 项目中标题栏和选项卡之间令人恼火的空白

    我几乎是新手Xamarin Forms我正在开发一个相当简单的跨平台应用程序 该应用程序在 Android 中显示得足够好 但在 UWP 中却出现了一个愚蠢的空白 该项目由一个 TabbedPage 组成 其中包含 4 个 Navigati
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section
  • 嵌入式二进制资源 - 如何枚举嵌入的图像文件?

    我按照中的说明进行操作这本书 http www apress com book view 9781430225492 关于资源等的章节 我不太明白的是 如何替换它 images Add new BitmapImage new Uri Ima

随机推荐

  • Ruby Mailer:参数数量错误

    我正在努力构建我的邮件程序 但我不断遇到 参数数量错误 0 代表 1 可以说我疯了 但我觉得我定义的一切都是正确的 控制器 为简洁起见被截断 def create cms484 Cms484 new cms484 params respon
  • scala 中的间接递归泛型类型定义

    直接类型递归就可以工作 trait TT T lt TT T 但我可以用天真的方法做间接的 trait UU V lt VV UU V trait VV U lt UU VV U 给我错误 CyclicTraits scala 23 err
  • C++ 中对外部命令的线程安全并发调用

    我一直在互联网上寻找一种方法 以线程安全的方式从我的 C 程序中并发调用外部程序 据我了解 popen system 和 fork 都不是线程安全的 在我看来 这里缺少了一些东西 到目前为止我还没有找到 是否有可能没有办法从不同线程并发调用
  • 禁用特定块的全页缓存

    我正在使用具有全页缓存功能的 magento EE 有一个动态更新的块 但我似乎无法禁用它的缓存 我想要实现的理想目标是 仅禁用特定块的缓存 以便每次页面加载时都会再次呈现它 我尝试过的事情 将 unsetData 包含到布局文件中
  • 如何计算 WPF 绑定中的值

    我有一个应用程序 它使用两个滑块来生成在代码中其他地方使用的产品 我想要的是将产品值绑定到文本块或工具提示 例如 看起来像 10 x 15 150 第一部分很简单 如下所示
  • 如何在面向 .NET Core 的 Visual Studio 2015 中引用 System.Data?

    我正在尝试访问IDbConnection接口在类库中 以便创建一个连接对象来连接数据库并从数据库中获取数据 但我无法访问IDbConnection接口应该是在系统数据 dll 我在 NuGet 中也找不到它 那么 我该怎么办呢 Micros
  • 想要在提交表单后刷新 div 吗?

    我有一个简单的表格和一个 div 容器 我的问题是我在提交表单时尝试刷新 div div FOO FOO FOOOOOOOOOOOOOOOOO div div
  • 如何在 iOS 8 启动屏幕中设置标签字体

    我们如何在启动屏幕中将字体设置为标签 我尝试过通过故事板设置自定义字体 该字体已应用并在情节提要中看到 但当我启动应用程序时 我无法看到应用的字体 如何克服这个问题 尽管它可能看起来像在 Xcode 6 中一样 但您无法为启动屏幕指定自定义
  • 在实体版本 6 的 WCF 中使用“include”语法时,复杂对象不会返回

    好吧 这让我很困惑 因为我刚刚看到我的客户端在返回带有 include 的对象时基本上断开连接并终止 然而 如果没有 WCF 服务 它也可以正常工作 问题是我真的希望通过导航设置那些连接的对象 基本上 代码是一个复杂的对象返回 public
  • mat-button-toggle 的更改或单击事件

    我有一个垫子按钮切换组 其中有 5 个垫子按钮切换 我需要在单击或更改 val 时触发一个事件 尽管我更喜欢它是一个单击事件 提供的文档here https material angular io components button tog
  • Asp.NET 不应用我的 CSS 文件

    我的网站位于文件夹中 website 在浏览器中通过 url 打开http localhost 52912 website 我的默认页面和母版页均位于根目录中 在 Default aspx 中 我包括我的母版页 例如 在我的 WTF mat
  • Rails3 中的 before_create、before_update、before_save、before_destroy 的弃用警告

    我刚刚将我的应用程序从 Rails 2 3 升级到 3 我得到了一些 我的 before create update save destroy 等的弃用警告 有谁知道如何解决这个问题 这些是我的警告 DEPRECATION WARNING
  • Haskell 多行 Lambda 表达式

    我正在从 learnyouahaskell com 学习 Haskell 有一个这样的例子 search Eq a gt a gt a gt Bool search needle haystack let nlen length needl
  • 如何直接对数组或一组数组进行排序而不创建更多单元格引用?

    如何直接对数组进行RANK 我想避免在单元格中创建更多中间数据只是为了引用它们 Excel RANK AVG 公式表明它接受数组和引用 Syntax RANK AVG number ref order The RANK AVG functi
  • 未找到“App\Http\Controllers\DB”类,我也无法使用新模型

    我有一个非常基本的问题 在 L4 中 以下方法是开箱即用的 所以现在我迷失了 请帮忙 几天前 我开始了一个 Laravel 5 0 项目 我现在已经有了全新 干净的安装 问题 1 当我尝试从数据库获取任何内容时 headquote DB t
  • 为什么 RecognitionListener 在 JellyBean 中停止工作?

    对于所有使用 Android 的人语音识别API http developer android com reference android speech RecognizerIntent html 曾经有一个方便的识别监听器 http de
  • 如何为 2 个不同的团队在两条线上获得正确数量的 count() ? (计算进球数)

    我正在尝试编写的代码应该读取文本文件 并检查 EASTS 或 WESTS 得分了多少次 我可以使用 find 和 EASTS 或 WESTS 来获取数字 但我不是得到出现的次数 而是得到它在每行中存在的次数 So 1 1 1 1 我不知道为
  • 聚合物。动态添加或删除观察者的方法

    有没有办法不在元素初始化时添加或删除观察者 我可以这样定义观察者 observers dataChanged data 我可以稍后删除这个观察者 还是可以以不同的方式设置这个观察者 您可以通过以下方式轻松动态添加观察者 this addOb
  • iOS 上的框架圆角半径不是圆角

    我正在尝试圆化堆栈布局的角 它适用于 Android 但在 iOS 上 它们仍然显示为方形 但它确实显示框架阴影 我的 XAML 是
  • 在 PocketPC 上运行后台服务

    我最近给自己买了一部新手机 运行 Windows Mobile 6 1 Professional 当然 出于爱好 我目前正在考虑为其编写一些代码 我的计划是让一个服务作为 DLL 运行 由 Services exe 加载 这需要收集一些数据