|
我以为延时_高精度(),己经对精度有提高了!?想不到c++的写法延时_高精度2(),更高精度!
#嵌入代码
#include <windows.h>
#include <mmsystem.h>
#include <chrono>
#include <thread>
#pragma comment(lib, "winmm.lib")
void 延时_高精度(int 毫秒数){
timeBeginPeriod(1); // 提高时钟精度
Sleep(毫秒数); // 休眠指定毫秒数
timeEndPeriod(1); // 恢复默认精度
}
void 延时_高精度2(int 毫秒数){
if (毫秒数 <= 0) return;
// 设置最小定时器分辨率(1毫秒)
timeBeginPeriod(1);
auto 开始时间 = std::chrono::high_resolution_clock::now();
auto 目标时间 = 开始时间 + std::chrono::milliseconds(毫秒数);
// 精确循环等待
while (std::chrono::high_resolution_clock::now() < 目标时间) {
// 动态调整等待策略
auto 剩余时间 = std::chrono::duration_cast<std::chrono::milliseconds>(
目标时间 - std::chrono::high_resolution_clock::now()).count();
if (剩余时间 > 2) {
// 剩余时间较长时使用Sleep
Sleep(1);
} else {
// 最后2毫秒使用忙等待
std::this_thread::yield();
}
}
// 恢复系统默认定时器分辨率
timeEndPeriod(1);
}
#嵌入代码结束
函数 void 延时_高精度(整型 毫秒数)
函数 void 延时_高精度2(整型 毫秒数)
|
|