1ms보다 더 정확하게 시간을보고하는 시간 서비스를 구현하려고합니다. 나는 초기 측정을하고 StopWatch를 사용하여 델타를 추가하는 것이 쉬운 해결책이라고 생각했습니다. 문제는이 방법이 벽 시간에서 매우 빠르게 갈라지는 것입니다. 나는 비교적 최근의 단절 하드웨어에 대한 2ms의/분의 속도로 발산하고C#에서 고해상도 DateTime.UtcNow를 구현하는 가장 좋은 방법은 무엇입니까?
public static void Main(string[] args)
{
System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch();
DateTime baseDateTime = DateTime.UtcNow;
s.Start();
long counter = 0;
while(true)
{
DateTime utcnow = DateTime.UtcNow;
DateTime hpcutcnow = baseDateTime + s.Elapsed;
Console.WriteLine(String.Format("{0}) DT:{1} HP:{2} DIFF:{3}",
++counter, utcnow, hpcutcnow, utcnow - hpcutcnow));
Thread.Sleep(1000);
}
}
예를 들어, 다음 코드는 벽 시간 내 높은 해상도 시계 사이의 차이를 측정하려고합니다.
Windows에 또 다른 시간 기능이 있습니다. 정확하지 않을 수도 있습니다. 그렇지 않다면 고해상도 클록이나 써드 파티 라이브러리를 만드는 더 나은 방법이 있습니까?
질문 :'DateTime.UtcNow'가 당신에게 충분히 정확하지 않다면, 당신은 당신의 시간 서비스를하기 위해 무엇을 사용할 것입니까? – StriplingWarrior
@ Hans의 위대한 답변 외에도 하드웨어 장치 ("고가의 크리스털 발진기"가있는 것)를 사용하여이를 수행하려고 시도 할 것이라고 덧붙입니다. Windows 박스에서 [ms 사용 시간]을 전송할 수 있는지 확실하지 않습니다. –