2010-08-05 80 views
3

我试图用C#/ .NET暂停时间。我可以设定时间,但我想设定暂停时间。Windows中的暂停时间

有谁知道如何做到这一点?

命令提示符的建议也是有帮助的。

我正在使用Visual Studio 2010,如果重要。

+2

你的意思是暂停'定时器'?我认为只有超人可以暂停时间 - 或者他只是让时间倒退? :) – 2010-08-05 12:07:19

+2

@DHoerster - 查克诺里斯呢? :) – Giorgi 2010-08-05 12:12:44

+0

你为什么要这么做? – 2010-08-05 12:14:01

回答

3

用于测试?还是现实生活?

对于测试,您可以mock DateTime.Now(虽然它更容易有一个IClock接口)。对于实际用法 - 我只是不会

还是你的意思是Thread.Sleep

+0

@ Marc - 这是我需要冻结的系统时间,我需要检查本周没有输入的报告,而不是下周,我在下周前的23:59:59检查它。这是检查系统不认为它是下一周。此过程需要1秒以上的时间来检查自动化测试中的报告。 – chrissygormley 2010-08-05 12:23:59

+0

您不需要冻结系统时间来执行此操作。这也不会是可靠的,因为如果冻结系统时间需要一秒多的时间呢?要么提前运行该过程,要么改善您的时间处理代码。如果代码运行的时间不足一个小时,那么你应该看看前一周。只需将其添加到您的代码中。 – 2010-08-05 12:32:13

+0

@chrissygormley,正如其他人所指出的那样,最好的办法是按时分离所有的依赖关系,这样你就可以模拟测试的时序行为。这并不容易,特别是如果你有一个遗留的代码库。我个人喜欢有一个ITimerService提供各种与时间有关的函数(报告DateTime.Now,时间回调,测量经过时间等),我可以注入需要时间意识的类中。 – 2010-08-05 13:43:01

0

我想你是在谈论停止窗口的时间,我想这是一个不是Windows的功能来做到这一点。 实际上你试图达到什么目标(除了休息窗口)可能有其他解决方案。

+0

@ MikeG - 我在特定的时间编写测试,它需要与测试运行时保持一致。这是边界测试,我会假设,因为你可以改变时间到过去,应该没有问题,暂停Windows计时器。 – chrissygormley 2010-08-05 12:16:14

+2

将时钟模拟为一个可替换的假类,它可以在整个测试中返回相同的值。 – 2010-08-05 12:17:36

0

嗯,我不确定你为什么要这么做,但是,由于在Windows中没有'PauseTime'函数,所以你不需要一个标记当前的服务时间,然后连续将系统时间设置为该开始时间。这应该达到保持系统时间一致的效果。

+0

@ Kazar - 这就是我在那一刻所做的,但我希望有一种方法来冻结它。无论如何感谢 – chrissygormley 2010-08-05 12:17:29

0

如果您需要查找某些调试工作的经过时间,请参见System.Diagnotics.Stopwatch类。 page on MSDN有关于如何使用它的一些体面的例子。我不知道你正在寻找什么类型的精度,所以如果你正在寻找高性能的时序诊断,那么这可能不是你要使用的类。

希望这会有所帮助!