Как получить временной интервал в миллисекундах

Я хочу получить временной интервал в миллисекундах, сравнив две временные метки с 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 миллисекунд, я хочу узнать больше об этом новом событии. Если нет, то я даже не хочу продолжать и уйду по возвращении.

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);

person meltemxxx    schedule 08.04.2019    source источник
comment
Хорошо, а в чем вопрос..?   -  person Sean    schedule 08.04.2019
comment
AFAIK TotalMilliseconds возвращает количество миллисекунд.   -  person the default.    schedule 08.04.2019
comment
Используйте TotalMilliseconds. Миллисекунды будут получать только фактические миллисекунды результатов, которые не будут работать, когда дельта больше секунды.   -  person jdweng    schedule 08.04.2019


Ответы (2)


Вы можете использовать deltaT.TotalMilliseconds, который выражает вашу дельту в миллисекундах. Поэтому ваш чек может быть переписан как

if (deltaT.TotalMilliseconds <= 10)
{
    return;
}

10 - это значение, которое я вывел. Возможно, это не то, что вам нужно, но ваш вопрос является частичным. Этот ответ касается вашего конкретного вопроса, однако, если вам нужно измерить продолжительность задачи, вы должны использовать класс Stopwatch, который предназначен для этой цели.

person Yennefer    schedule 08.04.2019

если вы хотите запускать событие каждые 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;
}
person Denis Schaf    schedule 08.04.2019
comment
Это тоже хорошая идея! Я видел это и раньше, но я также хочу сохранить отметку времени в моем счетчике событий позже. Вот почему я решил сделать это таким образом :) - person meltemxxx; 08.04.2019
comment
Вы по-прежнему можете сохранить отметку времени в функции YourAmasingEvent, и вариант с таймером всегда будет лучше с точки зрения точного измерения временного интервала. - person Denis Schaf; 08.04.2019