Мне нужно что-то показать на экране за точный, очень маленький интервал времени. При работе с мониторами с фиксированной (и относительно медленной для этой задачи) частотой обновления это будет ограничивающим фактором — и мне придется разрешить пользователю устанавливать время отображения в количестве «кадров» (= 16, (6) мс для мониторов с частотой 60 Гц).
Первоначально я рассматривал просто использование точного таймера (на основе класса секундомера), но проблема в том, что нет способа (известного мне) узнать, сколько кадров было фактически показано, поэтому, если я покажу что-то, скажем, 21 мс, у меня есть ~ 25% вероятность того, что он будет отображаться в течение 2 кадров (33,3 мс) и ~ 75% вероятность того, что он будет показан в течение 1 кадра (16,6 мс), в зависимости от того, как интервал обновления 16,6 мс совпадает с моим Интервал 21 мс.
Я знаю, что это, вероятно, можно сделать с помощью Vsync в DirectX/opengl/etc, но я бы хотел, если возможно, остаться с простыми формами Windows. Итак, есть ли способ либо узнать, сколько кадров было показано с некоторого времени, либо перехватить событие отрисовки нового кадра на мониторе, либо вручную заказать перерисовку кадра или что-то в этом роде?