微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Windows 10 2004中将计时器分辨率重置为默认值?

如何解决如何在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,&current_resolution);
NtSetTimerResolution(maximum_resolution,TRUE,&current_resolution);

但是,我无法将其恢复为原始值156250。

我的尝试:

NtQueryTimerResolution(&minimum_resolution,&current_resolution);

std::cout << "minimum = " << minimum_resolution << "\nmaximum = " << maximum_resolution << "\ncurrent = " << current_resolution << "\n";

auto result = NtSetTimerResolution(minimum_resolution,FALSE,&current_resolution);

std::cout << "after setting using FALSE,current = " << current_resolution << "\n";

NtQueryTimerResolution(&minimum_resolution,&current_resolution);

std::cout << "Now,minimum = " << minimum_resolution << "\nmaximum = " << maximum_resolution << "\ncurrent = " << default_resolution << "\n";

result = NtSetTimerResolution(minimum_resolution,&current_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,然后打印日志。

另外,最好检查一下函数的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。