Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取数据到达的精确时间,2台不同的PC_C# - Fatal编程技术网

C# 获取数据到达的精确时间,2台不同的PC

C# 获取数据到达的精确时间,2台不同的PC,c#,C#,当我得到某个数据时,我试图得到精确的(或非常接近的)时间。 在这种情况下,记录通过TCP发送的来自麦克风的数据和来自另一个PCs麦克风的数据 现在,从我自己的麦克风很容易,只要写下我用NAudio获取数据的日期/时间,就可以了 然而,使用另一台PC并不是那么容易 我首先想,为什么不写下它到达的时间呢 遗憾的是,这并不精确,您必须知道数据到达和发送之间的延迟才能知道这一点 然后我想,难道我不能通过TCP发送与数据相同的包中的时间吗 好吧,虽然它“起作用”,但时间相差约13秒,我可以保证滞后时间不是

当我得到某个数据时,我试图得到精确的(或非常接近的)时间。 在这种情况下,记录通过TCP发送的来自麦克风的数据和来自另一个PCs麦克风的数据

现在,从我自己的麦克风很容易,只要写下我用NAudio获取数据的日期/时间,就可以了

然而,使用另一台PC并不是那么容易

我首先想,为什么不写下它到达的时间呢

遗憾的是,这并不精确,您必须知道数据到达和发送之间的延迟才能知道这一点

然后我想,难道我不能通过TCP发送与数据相同的包中的时间吗

好吧,虽然它“起作用”,但时间相差约13秒,我可以保证滞后时间不是13秒,这让我得出结论,我们的个人电脑日期/时间不同,这并不奇怪,因为正常的日期没有那么精确

(是的,我们生活在同一个地区

现在,还有别的方法吗

当前代码:

 private void Sending(object sender, NAudio.Wave.WaveInEventArgs e)
        {
            try
            {

                var date = (String)DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff");
                var bdate = StringToByteArray(date);

                if (connect && MuteMic.Checked == false && skip == false)
                {
                    SendQueue.Add(bdate);
                    SendQueue.Add((byte[])e.Buffer.Clone());
                }
                if (Record && FileCreated == 0)
                {
                    waveWriterYour = new WaveFileWriter(path + Environment.UserName + " - " + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff") + ".wav", new WaveFormat(48000, 16, 2));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, ":Sending", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

“发送队列将安排在另一个线程中发送它们,使其更好地组织起来,但这并不重要”

首先,我将重新评估您是否真正需要“精确时间”,或者您真正需要的是数据是在另一个节点之前还是之后到达的(即节点间事件的相对顺序)。跨节点同步时间充满了问题


我至少会先看看和。您真正想要做的是在分布式环境中保持一致性。如果不采取系统的方法,不以现有的、经过尝试和测试的技术为基础,这是复杂的。此外,还应重新审视分布式一致性。这是一个复杂而广泛的领域,但从长远来看,对这一主题有很好的了解可能会对你有所帮助。

时钟同步是物理学中的一个老问题。你也会有问题的。如果一台计算机以超过光速10%的速度运行会怎么样?开玩笑吧——你甚至不能确定两台机器的时钟时间是同步的。我知道,或者说不是很精确,但至少计时器从来都不同步,除非在极度受控的情况下。但我不需要完全精确,在10-50毫秒内是可以的,我想这应该是可能的。也许我是乐观的。你们可以把收到的数据发送回远程计算机。然后,远程pc会将初始发送和接收数据之间的时间除以2,这样您就有了类似于您的时间延迟的东西。然后将这些信息从远程pc发送回您的电脑。非常正确,然后我可以用它来反驳差异。然而,我不知道如何做到这一点,我想对每个包(或者可以说是数据馈送)进行整个计算,这意味着一切都必须自动化。我的意思是“精确时间”只是根据“我的时间”知道两件事发生的时间。意思是,如果我在16:00:00得到数据,他得到16:00:01,那就是1秒,这就是我想知道的时间。如果他的时间是16:00:01,实际上是15:53:00,或者其他什么原因导致我的时间不同,那么这个计算毫无价值。当然,如果我知道我们时代之间的精确(或接近)差异,我可以在计算中用它来反驳它。但不完全确定如何完整地做到这一点。为了做到这一点,您需要完全同步——这实际上是不可能的。我想问你为什么需要每个事件的精确时间,而不是相对时间。我之所以需要它,是因为我只是通过写入从录音设备和网络接收到的数据来保存/录制对话。而且数据本身并不能说明问题,因为记录不是同时开始的,而且会有点不同步(取决于时间间隔)。幸运的是,我们的延迟可能非常低(10-30毫秒),所以这并不重要,但这是我想解决或改进的问题。