gpt4 book ai didi

c# - 日期时间漂移 - 2 小时后出现奇怪的问题

转载 作者:太空狗 更新时间:2023-10-29 21:57:59 24 4
gpt4 key购买 nike

我有一个线程每 40 毫秒(25 赫兹)生成一个网络数据包,它是一个无限循环(直到被告知停止),我正在使用 thread.sleep。

当我构建数据包时,其中一个值是当前 GPS 时间,使用 DateTime.UtcNow 并添加闰秒。

这在我开始时工作正常,但它随时间漂移,大约 2 小时后,它落后 5 秒。

我有一个 Symmetrom GPS 时间服务器,我正在使用他们的软件作为 NTP 客户端,它表示 PC 上的累积漂移约为 1.2 秒(我注意到的大部分是在 PC 关闭时漂移并且不同步到 NTP)。

有人知道出了什么问题吗?我知道 thread.sleep 不是完美的时机,Windows 也不是 RTOS,但漂移没有意义,丢帧会。

由于一些专有和 ITAR 问题,我无法发布代码,但我可以发布一个粗略的大纲:

while(!abort) { 
currentTime = DateTime.UtcNow + leapSeconds ;
buildPacket(currentTime);
stream.Write(msg, 0, sendSize);
//NetworkStream Thread.Sleep(40);
}

我在 Windows 7 中使用 Visual Studios 2010。

最佳答案

我认为发生这种情况是因为 while 循环执行的时间是 40 毫秒(您的 sleep 时间)+ 执行构建数据包的代码所需的时间。

您尝试过使用 System.Threading.Timer 吗?这样你的代码将在一个单独的线程中执行,然后是计算你的时间的线程。但是,我认为性能不足以让您的实时应用程序长时间运行。

关于c# - 日期时间漂移 - 2 小时后出现奇怪的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21101090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com