Как создать функцию обработки каждой миллисекунды? - страница 19

 
Реter Konow:

Знаете, Вы производите впечатление очень умного человека. Мне понравились Ваши аргументы.

Однако, я бы несогласился, что "все здесь умничают". Некоторые участники обсуждения выглядят очень подготовленными в теме.  

А как вы это определили? У меня нет изображения на аватаре, а у других, я пытался определить "подготовленность" по тому какое изображение на аватаре, и мне не удалось.

Поздравляю вас, вы изобрели новую науку, аваторологию.

 
jdjahfkahjf:

А как вы это определили? У меня нет изображения на аватаре, а у других, я пытался определить "подготовленность" по тому какое изображение на аватаре, и мне не удалось.

Поздравляю вас, вы изобрели новую науку, аваторологию.

Я не сужу об уме человека по его внешнему виду. Ваш стиль выражения мыслей показался мне знакомым. А этот стиль, принадлежит одному, очень умному человеку. 

 
jdjahfkahjf:
Общеизвестный стандарт был сделан как минимум для качества, и за технических и экономических рассуждений, не для "комфорта глаз".
Мозг обрабатывает одно изображение за 13 миллисекунд, это будет 77 кадров в секунду.

Не обрабатывает за 13 мс, а способен заметить. Это минимальное время необходимое, что бы что-то увидеть (как написано в некоторых статьях в интернете). А обрабатывать одно изображение можно в течение всей жизнь, как все искусствоведы обрабатывают Мону Лизу.  

 

Смотрел сегодня телевизор)
Бесплатные каналы все интерлейсные (576i) плюс пара каналов 720p. 
Интерлейсные каналы транслируются 50 полукадров/сек, полнокадровые каналы - 50 кадров/сек.

Рассказываю как явно увидеть тормоза 25-ти кадров.
Включаете ТВ, находите программу с бегущей строкой (к примеру какой-либо новостной канал).
И, параллельно, включаете эту же трансляцию у себя в компе (99% что в компе будет 25 фпс), разрешение картинки роли не играет.

Наблюдаем рывки в бегущей строке. Хотя строка еле ползет. На быстрых движениях рывки будут еще больше.

В принципе, это видно (и понятно) без сравнения, но для слепых, будет очевидно)


пс. кстати, также можно сравнить фильм с двд-диска (там тоже интерлейс) и фильм с треккера (25 фпс).

 
const bool Init = EventSetMillisecondTimer(1); // Таймер на миллисекунду.

void OnTimer( void )
{
  static ulong PrevTime = GetMicrosecondCount();
  static ulong MaxInterval = 0;
  
  static int i = 0;

  const ulong NewTime = GetMicrosecondCount();
  
  if (!(i++ % 10000))
    MaxInterval = 0;  
  
  
  if (NewTime - PrevTime > MaxInterval)  
  {
    MaxInterval = NewTime - PrevTime;
    
    Print(MaxInterval); // Считаем количество микросекунд между вызовами.
  }
    
  PrevTime = NewTime;  
}

Таймер на справляется со значениями в единицы миллисекунд.

15978
16076
16089
30238
15896
15983
30555
16147


Самодельный таймер.

class TIMER
{
private:
  static ushort TimerCount;
  
  const ushort TimerID;
  const uint Interval;
  
  ulong uPrevTime;
  
public:
  TIMER( const uint IntervalMcs ) : TimerID(TIMER::TimerCount++), Interval(IntervalMcs), uPrevTime(0)
  {
    if (!::EventChartCustom(-1, (ushort)(this.TimerID - CHARTEVENT_CUSTOM), 0, 0, NULL))
      ::Alert(__FUNCSIG__ + ": Error!");
  }

  void OnChartEvent( const int id, const bool Flag = true )
  {
    if (id == this.TimerID)
    {
      if (!::EventChartCustom(-1, (ushort)(this.TimerID - CHARTEVENT_CUSTOM), 0, 0, NULL))
        ::Alert(__FUNCSIG__ + ": Error!");
              
      const ulong NewTime = ::GetMicrosecondCount();
      
      if (NewTime - this.uPrevTime >= this.Interval)
      {
        this.uPrevTime = NewTime;
        
        if (Flag)
          ::OnTimer();
        else
          this.OnTimer();
      }
    }
  }`
  
  virtual void OnTimer( void ) {};
};

static ushort TIMER::TimerCount = 1122 + CHARTEVENT_CUSTOM;


Использование такое.

TIMER Timer(1000); // Таймер на миллисекунду.

void  OnChartEvent( const int id, const long&, const double&, const string& )
{
  Timer.OnChartEvent(id);
}


Тот же проверочный OnTimer, что в начале привел, показывает такие значения с самоделкой.

1000
1029
1000
1006
1000
1001
1006
1000
1004


Минус - высокая нагрузка CPU.