Класс CRefTime

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Иерархия классов creftime

Класс CRefTime является вспомогательным классом для управления временем ссылки.

Эталонное время — это единица времени, представленная в 100-наносекундных единицах. Этот класс использует тот же макет данных, что и тип данных REFERENCE_TIME , но добавляет некоторые методы и операторы, обеспечивающие сравнение, преобразование и арифметические функции. Дополнительные сведения о эталонном времени см. в разделе Время и часы в DirectShow.

Открытые переменные-члены Описание
m_time Задает значение REFERENCE_TIME .
Открытые методы Описание
CRefTime Метод конструктора.
GetUnits Извлекает время отсчета в единицах 100 наносекунд.
Миллисеки Преобразует время ссылки в миллисекундах.
Операторы Описание:
operator REFERENCE_TIME() Приводит объект к типу данных REFERENCE_TIME .
operator= Назначает новое время ссылки.
operator+= Добавляет два ссылочных времени.
operator = Вычитает одно время ссылки из другого.

Комментарии

Использование этого класса может привести к потенциальной ловушке. Если применить оператор += с объектом CRefTime в качестве левого операнда и переменной типа LONG в качестве правого операнда, компилятор неявно приведет правый операнд в объект CRefTime . Это приведение использует конструктор CRefTime , который преобразует миллисекунда в REFERENCE_TIME единиц; в результате правый операнд умножается на 10 000:

CRefTime rt;   // rt.m_time is 0.
LONG val = 20;
rt += val;    // Coerce val to CRefTime, rt.m_time is now 200,000.

Однако то же самое не происходит с помощью оператора +:

CRefTime rt;   // rt.m_time is 0.
LONG val = 20;
rt = rt + val; // CRefTime, rt.m_time is 20.

Требования

Требование Значение
Заголовок
Reftime.h (включая Streams.h)
Библиотека
Strmbase.lib (розничные сборки);
Strmbasd.lib (отладочные сборки)