Как мне подсчитать, как часто вызывался метод в течение 10 миллисекунд?

#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();
}