Windows 程序究竟何时暂停运行?

ros*_*mcm 6 screensaver timer windows-xp

我有一个应用程序需要在 Windows XP 和 7 上无人值守地长时间运行。我让它在安装了LogMeIn的远程机器上运行,这样我就可以从远处看它。该程序具有由计时器控制的定期日志记录任务。

我注意到,如果 PC 在延迟后设置为屏幕保护,然后在退出屏幕保护程序时显示用户登录屏幕,当 PC 进入屏幕保护程序时,我的应用程序将停止工作。

当我远程登录并将其踢出屏幕保护程序时,它会从停止的地方继续,但在此期间没有记录任何数据。

我以为我已经通过取消选中屏幕保护程序选项中的“在恢复时显示欢迎屏幕”复选框来解决它,但问题似乎又回来了。我尝试完全禁用屏幕保护程序 - 没有运气。

如何确保我的程序始终运行? 我知道在欢迎屏幕上 Windows 告诉我我有“x 程序正在运行”,但这似乎并没有扩展到 Windows 计时器,至少在某些时候是这样。


更多信息:

我添加了一些调试代码并提供了更多信息。

该应用程序是 Delphi 2006 GUI 应用程序。它执行的一项常规任务是生成报告。在生成报告时(可能需要一些时间),我会显示一个进度条。这是作为模态形式实现的,其中所有处理都发生在OnPaint处理程序中。

我发现如果在屏幕保护程序启动后触发报告并选中“在恢复时,显示欢迎屏幕”复选框,则OnPaint此模式表单的方法永远不会触发。表单的OnShow事件触发,然后应用程序挂起。一旦我们踢出屏幕保护程序并恢复,OnPaint事件就会执行,一切都会发生。

我最初的假设是在屏幕保护程序处于活动状态时计时器事件没有触发是错误的。事实上,防止计时器事件重入的其他代码是在报告完成之前阻止任何事情发生,并且报告在OnPaint事件中被阻止。

关于如何以在 PC 将屏幕保存到欢迎屏幕时运行的方式实施此进度表的任何建议?

nik*_*nik 2

您的问题中没有足够的数据来支持这一思路,
因此,我从一些假设开始,您可以先确认这些假设以进一步阅读答案。

  1. 您是否在目标计算机上使用某种域登录?
  2. 屏幕保护程序通常在系统锁定时启动
  3. 在某些配置中,系统锁定时用户登录会丢失
    (我记不起此处的确切概念,但如果您远程登录,可能会发生这种情况)
    简而言之,会话可能会终止...
  4. 最后,如果您的程序需要网络连接(或仅允许您登录的资源),这些访问可能会在会话终止时被撤销。
    这将使应用程序在这种情况下无法完成。

因此,如果您遇到这种情况,由于访问权限被撤销(会话结束时),应用程序无法完成其活动,并且当您再次登录以“解锁”系统时,会话将重新启动,您也可以重新启动应用程序(这可能会超时并停止而未达到结果)。但是,当您现在运行一个新会话时,它会再次正常启动(但是,当您让它继续运行时,会导致相同的问题 - 最终导致会话终止和屏幕锁定)。