是否可以使用查询性能计数器(Win32,C)获取时间戳
Is it possible to get Time stamps with use of Query performance counter (Win32,C )?
是否可以使用查询性能计数器(Win32,C++)获取时间戳?如果没有,在Win32-C++应用程序上获取时间戳的最准确方法是什么?
QueryPerformanceCounter
只是一个计数器,当机器通电并向上计数时,它包含一些值。它根本没有连接到挂钟。
CCD_ 2和CCD_
如果你只针对Windows 8,那么GetSystemTimePreciseAsFileTime
是非常精确的。
如果您在Windows pre 8上需要真正的高分辨率时间,您可以尝试使用系统时间和性能计数器的混合方法,如这里所述:为Windows 实现持续更新、高分辨率时间提供程序
如果您使用的是C++11,那么您可能还需要查看std::chrono::system_clock
或std::chrono::high_resolution_clock
。
硬件中有哪些时钟源?
如果您想要准确性,就不能使用QueryPerformaceCounter,因为它会随着CPU时钟而变化,这很快但并不准确。
中断定时器:这个定时器产生一个频率为1kHz的中断,可能非常准确。
HPET:1 MHz定时器。这个是你想要使用的。
音频接口采样时钟:该时钟的频率取决于音频采样率,但中断频率取决于声音缓冲区大小,通常需要长于几毫秒。
我已经成功地使用Waitable Timer以40ms的间隔驱动屏幕捕获程序。有关演示,请参阅:http://www.youtube.com/watch?v=SLad8-IRtg4。音轨是通过从音频输出到音频输入的模拟反馈记录的,这表明帧时钟与音频设备的采样时钟保持同步。相同的时钟应该在1毫秒内工作,但当机器忙于渲染3d内容并将视频帧压缩为PNG时就不行了:-)
要使用音频设备时钟,请将其记录到虚拟缓冲区。在Windows7上,使用新的音频架构来获得尽可能小的缓冲区大小。在较旧的系统上,您需要内核流。如果你要进行音频咨询,你也可以将函数生成器插入你的波形设备,并有一个循环,根据触发条件返回时间戳。通过这种方式,您将达到1毫秒以下。
- 获取 QInputEvent 在 Qt 4.8 中被放入 QEventLoop 队列时的时间戳
- 如何从远程 SFTP 服务器获取 HH-MM-SS 时间戳格式的文件列表
- 在 c++ 中获取 X 毫秒前的时间戳
- 如何获取零MQ时间戳?
- C++如何获取文件最近更改的时间戳
- 如何在不使用Chrono的情况下在C 中获取纳米秒的当前时间戳
- 获取 ISO 8601 时间戳 C++ 之前和之后的设置时间
- 自定义NTP客户端获取错误的时间戳
- 在 Linux 中获取时间戳的"最便宜"方式 (c++)
- 如何以毫秒为单位获取自 1970 年以来的当前时间戳,就像 Java 一样
- C++提升以 UTC 格式获取 unix 时间戳
- 如何在本机C++中获取进程名称和日期时间戳
- 从 UNIX 时间戳获取同月第一天的时间戳,而无需转换为本地时间
- 根据从两个不同线程获取的时间戳匹配图像
- 获取当前小时unix时间戳
- 是否可以使用查询性能计数器(Win32,C)获取时间戳
- C或C++代码,使用时区从epoch时间戳中获取一天中的小时数
- ffmpegc/c++获取帧计数或时间戳和fps
- 在后续调用中获取相同的时间戳值
- 如何从时间戳的间隔中获取天数列表