如何获得以毫秒为单位的时间跨度
How to get Timespan in Milliseconds
我想通过将两个时间戳与 DateTime.Now 和前一个 DateTime 进行比较来获得以毫秒为单位的时间跨度。我想检查是否每 10 毫秒或更晚有一个事件,但 DeltaT 的总毫秒数大约为 188。它比我预期的要高,这就是为什么我认为一定有问题。或者一切看起来都还好吗?
DateTime timestamp;
DateTime timestampAlt;
TimeSpan deltaT;
public void OnSensorChanged(SensorEvent e)
{
timestamp = System.DateTime.Now;
deltaT = timestamp - timestampAlt;
if (deltaT.TotalSeconds <= 0.01)
{
return;
}
更新:
非常感谢大家的回答,但我认为存在误解(我的错误,对不起)。所以又来了:
每当侦听器识别到一个事件时,我想保存时间戳并与之前事件的时间戳进行比较。如果两个事件之间的间隔超过 10 毫秒,那么我确实想了解更多关于这个新事件的信息。如果没有,我什至不想继续并会在 return.
之前离开
public void OnSensorChanged(SensorEvent e)
{
timestamp = System.DateTime.Now;
deltaT = timestamp - timestampAlt;
//int deltaT2 = timestamp.Millisecond - timestampAlt.Millisecond;
String timestampStr = timestamp.ToString("ff");
String timestampStrA = timestampAlt.ToString("ff");
if (deltaT.TotalMilliseconds <= 10 || deltaT.TotalMilliseconds <= -10) //deltaT.Seconds <= 0.01
{
return;
}
timestampAlt = timestamp;
newValue = e.Values[2];
//if (buffer[99] != 0.00)
// if last element of list is empty, add elements to buffer
if (buffer.Count <=99)
{
buffer.Add(newValue);
zeitbuffer.Add(timestamp);
}
else
{
Ableitung(DeltaBuffer(), DeltaTime()); // if last index of list is filled, do that function
}
if (e.Values[2] >= 11)
{
try
{
lock (_syncLock)
{
String z2 = newValue.ToString("0.0");
//noteInt2 = Convert.ToInt32(newValue);
try
{
_sensorTextView2.Text = string.Format("Note: {0}", z2 );
eventcounter.Add(z2);
您可以使用 deltaT.TotalMilliseconds
以毫秒为单位表示增量。因此您的支票可以改写为
if (deltaT.TotalMilliseconds <= 10)
{
return;
}
10是我推断的一个值。它可能不是你需要的,但你的问题是部分的。这个答案解决了您的特定问题,但是如果您需要测量任务的持续时间,您应该使用专为此目的设计的 Stopwatch
class。
如果你想每隔 n-Seconds
触发一个事件,你可以使用一个计时器,在他过去时触发一个事件:
Timer timer = new Timer();
timer.Interval = 100;
timer.Elapsed += YourAmasingEvent;
timer.Start();
private void YourAmasingEvent(object sender, ElapsedEventArgs e)
{
//do something here
(sender as Timer).Start();
}
使用您的代码:
我想你想等到时间过去,在这种情况下你将不得不使用这样的循环:
timestamp = System.DateTime.Now;
deltaT = timestamp - timestampAlt;
while(true)
{
if (deltaT.TotalSeconds <= 0.01)
{
return;
}
timestamp = System.DateTime.Now;
deltaT = timestamp - timestampAlt;
}
我想通过将两个时间戳与 DateTime.Now 和前一个 DateTime 进行比较来获得以毫秒为单位的时间跨度。我想检查是否每 10 毫秒或更晚有一个事件,但 DeltaT 的总毫秒数大约为 188。它比我预期的要高,这就是为什么我认为一定有问题。或者一切看起来都还好吗?
DateTime timestamp;
DateTime timestampAlt;
TimeSpan deltaT;
public void OnSensorChanged(SensorEvent e)
{
timestamp = System.DateTime.Now;
deltaT = timestamp - timestampAlt;
if (deltaT.TotalSeconds <= 0.01)
{
return;
}
更新:
非常感谢大家的回答,但我认为存在误解(我的错误,对不起)。所以又来了: 每当侦听器识别到一个事件时,我想保存时间戳并与之前事件的时间戳进行比较。如果两个事件之间的间隔超过 10 毫秒,那么我确实想了解更多关于这个新事件的信息。如果没有,我什至不想继续并会在 return.
之前离开public void OnSensorChanged(SensorEvent e)
{
timestamp = System.DateTime.Now;
deltaT = timestamp - timestampAlt;
//int deltaT2 = timestamp.Millisecond - timestampAlt.Millisecond;
String timestampStr = timestamp.ToString("ff");
String timestampStrA = timestampAlt.ToString("ff");
if (deltaT.TotalMilliseconds <= 10 || deltaT.TotalMilliseconds <= -10) //deltaT.Seconds <= 0.01
{
return;
}
timestampAlt = timestamp;
newValue = e.Values[2];
//if (buffer[99] != 0.00)
// if last element of list is empty, add elements to buffer
if (buffer.Count <=99)
{
buffer.Add(newValue);
zeitbuffer.Add(timestamp);
}
else
{
Ableitung(DeltaBuffer(), DeltaTime()); // if last index of list is filled, do that function
}
if (e.Values[2] >= 11)
{
try
{
lock (_syncLock)
{
String z2 = newValue.ToString("0.0");
//noteInt2 = Convert.ToInt32(newValue);
try
{
_sensorTextView2.Text = string.Format("Note: {0}", z2 );
eventcounter.Add(z2);
您可以使用 deltaT.TotalMilliseconds
以毫秒为单位表示增量。因此您的支票可以改写为
if (deltaT.TotalMilliseconds <= 10)
{
return;
}
10是我推断的一个值。它可能不是你需要的,但你的问题是部分的。这个答案解决了您的特定问题,但是如果您需要测量任务的持续时间,您应该使用专为此目的设计的 Stopwatch
class。
如果你想每隔 n-Seconds
触发一个事件,你可以使用一个计时器,在他过去时触发一个事件:
Timer timer = new Timer();
timer.Interval = 100;
timer.Elapsed += YourAmasingEvent;
timer.Start();
private void YourAmasingEvent(object sender, ElapsedEventArgs e)
{
//do something here
(sender as Timer).Start();
}
使用您的代码: 我想你想等到时间过去,在这种情况下你将不得不使用这样的循环:
timestamp = System.DateTime.Now;
deltaT = timestamp - timestampAlt;
while(true)
{
if (deltaT.TotalSeconds <= 0.01)
{
return;
}
timestamp = System.DateTime.Now;
deltaT = timestamp - timestampAlt;
}