정확한, 아주 작은 시간 간격을 위해 화면에 무엇인가를 보여줄 필요가 있습니다. 고정 된 (그리고이 작업을 위해 비교적 느린) 재생 빈도로 작동하는 모니터로 작업하는 것이 제한 요소가 될 것입니다. 사용자가 디스플레이 시간을 "프레임"(= 16, (6) 60Hz 모니터의 경우 ms).C# .Net은 얼마나 많은 모니터 프레임이 보여 졌는지 알거나 설정된 프레임 수만큼 화면에 무언가를 보여줄 수있는 방법이 있습니까?
원래는 정확한 타이머 (스톱워치 클래스에 기반 함)를 사용했지만, 실제로 얼마나 많은 프레임이 실제로 보여 졌는지를 알 수있는 방법이 없습니다. 즉, 21ms의 경우, 실제로 2 프레임 (33,3ms) 동안 표시 될 확률이 25 %이며 1 프레임 (16,6ms)에 대해 표시 될 확률이 75 %입니다. 새로 고침하는 방법에 따라 16,6ms 간격은 21ms 간격으로 맞 춥니 다.
나는 directx/opengl/etc의 Vsync를 사용하여이 작업을 수행 할 수 있지만 가능한 경우 간단한 Windows 양식을 사용하고 싶습니다. 그래서, 얼마 동안 여러 프레임이 보여 졌는지 알아 내거나, 모니터에 그려진 새로운 프레임의 이벤트를 가로 채거나 수동으로 프레임 다시 그리기를 주문하는 방법이 있습니까?
정확히 얼마나 많은 모니터 프레임이 표시되었는지 알고 싶습니다. T = 0ms에서 폼에 X를 칠한 다음, Thead.Spin()을 20ms가 경과 할 때까지 (StopWatch에서) 상상해보십시오. t = 20ms에서 폼을 지 웁니다. 사실, 프로그램의 사용자 (전형적인 60Hz 디스플레이가있는 경우)는 20ms 동안 X를 보지 못했습니다. 그는 16, (6) ms 또는 33, (3) ms 동안 그것을 보았습니다. 디스플레이가 자신의 OnPaint 또는 w/e와 독립적으로 코드 자체를 새로 고칩니다. 그게 - 사용자가 얼마나 오랫동안 이미지를 보았는지 - 제가 알아야 할 것입니다. – Istrebitel