C# .NET DateTime对象不太准确?

C# .NET DateTime对象不太准确?,c#,C#,我目前正在尝试编写一些代码,将向设备发送请求,然后等待响应。问题是响应没有结束字符来指示消息已完成,因此我们只需等待一段时间 我想做的是发送消息,然后等待一段时间。每次数据到达时,我希望将等待的时间再增加100毫秒,以防有更多的数据要跟踪。如果在这段时间后没有收到任何消息,则假定消息已完成。 这是我提出的伪代码: var waitTime Function SendData(data) { send the request here and then block with the n

我目前正在尝试编写一些代码,将向设备发送请求,然后等待响应。问题是响应没有结束字符来指示消息已完成,因此我们只需等待一段时间

我想做的是发送消息,然后等待一段时间。每次数据到达时,我希望将等待的时间再增加100毫秒,以防有更多的数据要跟踪。如果在这段时间后没有收到任何消息,则假定消息已完成。 这是我提出的伪代码:

var waitTime

Function SendData(data)
{
     send the request here and then block with the next code

     while (waitTime)
     {
          //wait
     }
}

Function RecieveData(data)
{
     Assign new data to a buffer
     waitTime++
}
SendData和ReceiveData函数都位于类中的不同线程上。我正在用C#编写这个。我曾尝试用DataTime对象实现这一点,但当使用10/100毫秒时,它似乎不是很准确

如果您能就如何实施这一目标提出建议,我们将不胜感激

问候
Adrian

试着比较DateTime,而不是滴答声。滴答声是100纳秒。它和系统时钟一样精确。当然,两台计算机之间的差异可能是巨大的(比较而言)。

DateTime
精确到大约1/64秒


为什么不直接使用
System.Threading.Thread.Sleep(毫秒)

考虑使用来测量这样的小增量。

如果您想睡眠一段时间,只需使用Thread.Sleep(10000)即可。这会导致线程睡眠达到您想要的毫秒数。

好,为了结束这个问题,我想发布我的解决方案:

bool dataInFlag;

function sendData(data)
{
     Send();

     dataInFlag = true;

     while(dataInFlag)
     {
           dataInFlag = false;
           Thread.Sleep(400);
     }
}

function recieveData(data)
{
     Parse();
     dataInFlag = true;
}
简而言之,while循环将执行,将dataflag设置回false,然后休眠,如果在休眠期间没有接收到数据,while循环将退出。如果收到数据,DataFlag将被设置回true,循环将再次启动! 我扩展了它,使得while循环的第一次执行休眠时间更长,而随后的每个循环休眠时间更短


再次感谢您的回复。

您为什么忙着等待而不是简单地拨打Sleep?这个答案()可能很有趣。请看:时钟的准确性无关紧要;相关的是精度。精确到1/64秒。您好,谢谢您的快速回复!我曾尝试使用Thread.Sleep()实现此功能,但我需要能够在每次传入新数据时增加睡眠时间,以防有更多的数据需要跟进。我想我可以睡觉,然后检查布尔值是否被设置为睡眠时间多一点?@Adrian:好的,那么每次有新数据进来时就增加睡眠时间。睡眠以睡眠时间长度为参数;根据需要增加参数的值。(请注意,时间是近似值。操作系统不能保证您会睡那么久。)好的,我将使用Thread.sleep并使用一个全局变量来增加睡眠时间。初始睡眠后,我将检查DataIn方法是否增加了睡眠时间,如果增加了,它将再次睡眠。如前所述,我已尝试使用sleep实现此功能,但数据的大小会有所不同,因此,当新数据进来时,我们希望增加等待时间,以防有更多的数据要跟随。因此,只要在每次数据到达时增加睡眠量即可。注意,您可以指定睡眠时间,这可以是一个变量,您可以根据需要修改该变量。