1

我们正试图在我们的应用程序中加入一些代码时间,但遇到了一个潜在的问题。我们希望计时是稳健的,以便计算机休眠的时间段、计时暂停,为我们提供更精确的活动使用时间。我们一直在使用各种 BCL 和 P/Invoke 方法(Environment.TickCount、DateTime.UtcNow、Stopwatch、QueryPerformanceCounter(我认为 Stopwatch 在可用时在内部使用)和 timeGetTime(来自 winnm.dll、mmtimer.dll 或 core.dll))但是他们都在休眠计算机时继续他们的滴答计数。

是否有任何强大的 BCL 或 P/Invoke 调用可以计算实际执行时间并在操作系统休眠时暂停?

我想另一种选择可能是使用上述方法之一并维持一个内部周期性滴答,这可能会解释时间中的“漏洞”(这可能表明休眠期),但这似乎有点麻烦并且易于实现和验证错误.

编辑:根据要求,我会添加一点背景。我们正在创建一个小型库来对应用程序中的功能使用时间进行计时。我们希望避免依赖第三方解决方案,因此我们需要坚持 BCL(或 P/Invoke,尽管我们希望避免这种情况)中的某些内容。我们收到了一些反馈,表明我们的一些时间已经过时,并且发现我们没有意识到我们的时间代码对操作系统中的休眠并不健壮这一事实。因此,我们正在寻找一种解决方案来提供程序的实际执行时间。我们不是在寻找 CPU 使用率或类似的较低级别的计数器,我们想要一种方法来测量该功能的实际执行时间,并且我们不将休眠操作系统视为执行时间。

4

1 回答 1

0

您可以使用以下功能在系统休眠时注册通知RegisterSuspendResumeNotification

您可能还希望在工作站被锁定、屏幕保护程序运行或桌面使用快速用户切换、使用系统事件通知服务切换用户时接收通知:

于 2019-03-18T18:04:21.873 回答