繁体   English   中英

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

[英]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, &current_resolution);
NtSetTimerResolution(maximum_resolution, TRUE, &current_resolution);

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

我的尝试:

NtQueryTimerResolution(&minimum_resolution, &maximum_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, &maximum_resolution, &current_resolution);

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

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

此外,最好检查函数的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM