![](/img/trans.png)
[英]How to decrease CPU usage of high resolution (10 micro second) precise timer?
[英]How to reset timer resolution to default in Windows 10 2004?
我使用以下方法成功地将时间分辨率更改为 0.5ms:
#include <Windows.h>
extern "C" NTSYSAPI NTSTATUS NTAPI NtSetTimerResolution(ULONG DesiredResolution, BOOLEAN SetResolution, PULONG CurrentResolution);
extern "C" NTSYSAPI NTSTATUS NTAPI NtQueryTimerResolution(OUT PULONG MinimumResolution, OUT PULONG MaximumResolution, OUT PULONG CurrentResolution);
ULONG minimum_resolution;
ULONG maximum_resolution;
ULONG current_resolution;
NtQueryTimerResolution(&minimum_resolution, &maximum_resolution, ¤t_resolution);
NtSetTimerResolution(maximum_resolution, TRUE, ¤t_resolution);
但是,我无法将其恢复到其原始值 156250。
我的尝试:
NtQueryTimerResolution(&minimum_resolution, &maximum_resolution, ¤t_resolution);
std::cout << "minimum = " << minimum_resolution << "\nmaximum = " << maximum_resolution << "\ncurrent = " << current_resolution << "\n";
auto result = NtSetTimerResolution(minimum_resolution, FALSE, ¤t_resolution);
std::cout << "after setting using FALSE, current = " << current_resolution << "\n";
NtQueryTimerResolution(&minimum_resolution, &maximum_resolution, ¤t_resolution);
std::cout << "now, minimum = " << minimum_resolution << "\nmaximum = " << maximum_resolution << "\ncurrent = " << default_resolution << "\n";
result = NtSetTimerResolution(minimum_resolution, TRUE, ¤t_resolution);
std::cout << "after setting using TRUE, current = " << current_resolution << "\n";
产生以下输出:
minimum = 156250
maximum = 5000
current = 4999
after setting using FALSE, current = 9999
now, minimum = 156250
maximum = 5000
current = 9999
after setting using TRUE, current = 9999
奇怪的是,9999 的值并没有持续存在; 连续调用产生相同的输出(不使用第一个代码块设置计时器); 即使重新启动也不会恢复任何东西。 我已确保 Visual Studio 和浏览器已关闭。 使用 timeBeginPeriod 和 timeEndPeriod 也没有任何作用。
请拨打NtQueryTimerResolution
后再次NtSetTimerResolution
,然后打印日志。
此外,最好检查函数的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.