2

我有一个显示当前时间/日期的显示器和一个随机幻灯片。当幻灯片开始时,它会创建一个目录中所有图像文件的列表,将其随机化,然后从中弹出图片,直到它为空,此时它将生成一个新的。它以特定的时间间隔弹出图片。

我看到一张可以制作出很棒的背景图片的图片,我想找到它。问题是我有大约 50 GB 的图片,我不会手动搜索它们。

所以我的计划是在幻灯片中找到随机对象的种子。如果您没有在随机对象构造函数中指定种子,它将使用 Enviroment.TickCount 属性,该属性返回自系统启动以来的毫秒数。

我大概知道图片出现在屏幕上的时间,并且进程会记住它们开始的时间,因此我实际上可以计算出随机对象的种子。我还记得幻灯片序列中的最后一张图像,因为它在生成新序列时有 5 秒的延迟,所以我可以很容易地看到我是否得到了正确的种子。

但是,DateTime.Now 似乎并不精确到毫秒,所以如果我能把它整理好,我将不得不检查更少的图片。

Sub Main()
    Dim SystemStartTime = Now.AddMilliseconds(-Environment.TickCount)

    Console.WriteLine(SystemStartTime.Millisecond) REM Prints different numbers each time. They should be equal
    Console.ReadLine()
End Sub
4

1 回答 1

0

Environment.TickCount正确使用有点困难。因为它是一个 32 位有符号整数,它的最大值为 2,147,483,647 个滴答声,大约为 24.9 天。下一个刻度将是 -2,147,483,648,它是负数。因此,您不能只将其添加到 aDateTime而不会冒错误的风险。听起来您的代码可能会在某种信息亭显示器上运行,它肯定可以一次运行数月。请参阅这些 MSDN 文档以供参考。

另一个问题 -DateTime.Now返回本地日期/时间。它根据计算机的时区进行调整,夏令时可能会有波动。如果您打算完全不使用时钟,您可能应该使用它DateTime.UtcNow

关于精度 - 虽然该DateTime类型具有极好的精度(1000 万滴答声 == 1 秒),但 Windows 系统时钟仅精确到大约 10 到 30 毫秒(取决于您的硬件和 Windows 版本)。无法保证 您将获得的读数准确度即使您的时钟精度非常好,您仍然需要考虑时钟漂移,并记住用户可以随时更改他们的时钟。即使您定期通过 Internet 同步时钟,也无法保证该级别的准确性。

您可能想阅读这篇 MSDN 文章。此外,您可以阅读accuracy 与 precision

顺便说一句- 如果您真的想要高精度高精度,您将需要一个0 层时间源,例如这家公司和其他公司出售的那些。我完全确定这对于您描述的应用程序来说太过分了。

于 2013-08-01T15:26:24.483 回答