【发布时间】:2011-02-17 12:54:19
【问题描述】:
我想要一个精确到微秒的实时时钟,我该怎么做?
除了秒表还有其他实时时钟吗?
【问题讨论】:
-
为什么“除了秒表”?这不就像问,“我要存储一个字符串。有没有字符串以外的字符串类型?”
标签: c#
我想要一个精确到微秒的实时时钟,我该怎么做?
除了秒表还有其他实时时钟吗?
【问题讨论】:
标签: c#
如果您无法访问互联网并且想要实时获得软件的定时试用许可证,那么您可以使用带有实时时钟的 USB 加密狗。
它的时间计算由电池驱动的内部时钟驱动。您可以使用这些类型的加密狗附带的 API 函数从 USB 加密狗获取时间。
EX-http://www.senselock-europe.com/en/elite-el-rtc-dongle.html
【讨论】:
如果你想要一个好的时间测量,我认为 csharp 作为一种高级语言可能不是一个好主意。您可以组装一个简单的程序来访问 RTC,然后通过库将其绑定到您的程序。从字面上看,这是您可以在没有对象悬垂的情况下获得的最佳方案,但它需要一些低层次的知识如何组合在一起。
【讨论】:
System.Diagnostics.Stopwatch 使用 QueryPerformanceCounter 和 QueryPerformanceFrequency Windows API。跨机器的分辨率不是标准的,但通常在微秒级(有关更多信息,请参阅this KB article)。
在 Vista/Win7 中还有 QueryProcessCycleTime 和 QueryThreadCycleTime,它们将为您提供进程/线程的经过周期数。如果您只想知道进程的活动时间(例如,您没有被关闭的时间),这很有用。
【讨论】:
对于高分辨率测量,您可以使用QueryPerformanceCounter 函数:
class Program
{
[DllImport("kernel32.dll")]
private static extern void QueryPerformanceCounter(ref long ticks);
static void Main()
{
long startTicks = 0L;
QueryPerformanceCounter(ref startTicks);
// some task
long endTicks = 0L;
QueryPerformanceCounter(ref endTicks);
long res = endTicks - startTicks;
}
}
【讨论】:
QueryPerformanceCounter,因此没有理由使用此代码(使用 .NET 2.0 或更高版本时)。对于仍在使用 .NET 1.1 的可怜人来说,这段代码仍然有用。
.NET 中可用的最精确计时器是StopWatch。
【讨论】:
您需要System.Diagnostics.Stopwatch,它可以精确到微秒(取决于硬件限制)测量时间间隔。
【讨论】: