#c#
#c#
Вопрос:
У меня есть sensorlistener, который запускает метод «onsensorchanged» каждый раз, когда происходит событие. Теперь я хочу знать, как часто этот метод выполняется в течение 10 миллисекунд.
У меня есть временной интервал (текущая временная метка- предыдущая временная метка), который должен выполнять «counter «, когда мой временной интервал (общий миллисекунд) меньше 10. К сожалению, мой счетчик всегда каким-то образом равен 0. Я выполнил инициализацию вне метода onSensorChanged, потому что он всегда будет инициализироваться при каждом запуске метода (до 0).
DateTime timestamp;
DateTime timestampA<
TimeSpan deltaT;
int counter = 0;
public void OnSensorChanged(SensorEvent e)
{
timestamp = System.DateTime.Now; //timestamp of now
deltaT = timestamp - timestampA< //delta of timestamp of event 1 and event 2
//if delta between two events happened before 10 milli sec past, ignore
if (deltaT.TotalMilliseconds <= 10 || deltaT.TotalMilliseconds <= -10) //deltaT.Seconds <= 0.01
{
counter ;
return;
}
Console.WriteLine(counter);
//if 10 ms past, our previous timestamp become the old
timestampAlt = timestamp;
}
Комментарии:
1. Система. Диагностика. Stopwatch() — это то, что нужно использовать для синхронизации в миллисекундах, частоты обновления. Now вообще не гарантируется.
Ответ №1:
DateTime.Now
само по себе вычисление может занять слишком много времени, вам лучше использовать a System.Diagnostics.Stopwatch
.
Что-то вроде этого:
Stopwatch stopwatch = new Stopwatch();
int counter = 0;
public void OnSensorChanged(SensorEvent e)
{
if (!stopwatch.IsRunning)
{
// start the stopwatch
stopwatch.Start();
}
else
{
if (stopwatch.ElapsedMiliseconds <= 10)
{
counter ;
return;
}
}
Console.WriteLine(counter);
// 10ms passed, restart the stopwatch
stopwatch.Restart();
}