c# - 如何记录计算机之间的相对时间?

标签 c# time computer-science

我需要在不同的计算机上独立记录事件并重建这些事件相对于彼此发生的顺序。解决方案要求每台计算机相对独立;他们无法直接相互交谈或与单一来源交谈。

我最初的解决方案记录了每台机器上的时间,但是由于不同机器上的时间可能不同,并且一天中的时间可能会发生变化,所以这并没有完全解决我的问题。我决定在机器 (1) 启动进程或 (2) 系统时钟发生变化时与所有机器共享。

所以从每台机器上我都会得到一个充满这些的日志

public class Activity {
    DateTime TimeOccurred { get; set; }
    string Description { get; set; }
}

每当上述(1)或(2)发生时,我都会向日志添加一个事件并将其广播到其他机器,这些机器将相同的事件添加到他们的日志中,TranslatedTime 是他们自己的时间:

public class TimeSynchronization : Activity {
    string SourceMachine { get; set; }
    DateTime TranslatedTime { get; set; }
}

所以机器 A 会有(按顺序):

TimeSynchronization "started" at 3:00 am.
Activity "asked a question" at 3:05 am.
TimeSynchronization from machine B at 3:05 am.
TimeSynchronization "clock changed" at 3:03 am.
Activity "received an answer" at 3:04 am.

机器 B 将具有(按顺序):

TimeSynchronization "started" at 3:05 am.
TimeSynchronization "clock changed" at 3:06

所以我需要将上述事件的相同顺序和时间重建为:

On machine A: TimeSynchronization "started" at 0:00
On machine A: Activity "asked a question" at 0:05
On machine B: TimeSynchronization "started" at 0:05
On machine A: TimeSychronization from machine B at 0:05
On machine A: TimeSynchronization "clock changed" at 0:06
On machine B: TimeSynchronization "clock changed" at 0:06
On machine A: Activity "received an answer" at 0:07

采取 List<Activity> 的最佳方式是什么?从每台机器并将其合并到一个列表中,并按顺序排列事件?

最佳答案

如果两台机器通过网络连接,您的程序可以询问另一台机器现在是什么时间。这样,机器 A 上的程序就可以询问 A 和 B 上的时间,然后记录这两个时间。

您提到时间可能会在白天发生变化(大概是用户更改了时间)。您可以使用 Win32.TimeChanged 事件检测到这一点。

关于c# - 如何记录计算机之间的相对时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/827473/

相关文章:

c# - 最快(最简单)的 GUI MFC 或 C# 或 QT 或?

date - 如何在Go中以自定义日期格式获取以小时为单位的时差

c - 需要清楚地了解 timespec 结构

sql-server - T-SQL 是否允许多个 ELSE IF?或者我必须嵌套条件吗? SQL Server 2012

java - 8-Puzzle Solution 无限执行

c# - 远程机器上的 iisreset (C#)

c# - 使用Xamarin表单选择产品时如何显示产品详细信息

c# - 包含条件逻辑的正确 Razor 语法是什么

iOS 设备上的 ctime 无法正确测量时间

security - RSA密码系统