惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Jina AI
Jina AI
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
博客园 - 司徒正美
罗磊的独立博客
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Vercel News
Vercel News
A
About on SuperTechFans
I
InfoQ
D
DataBreaches.Net
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队

博客园 - 吾非无心

MSB4019 找不到导入的项目“C:\Users\...\AppData\Local\QtMsBuild\vs-debugtools\qt_import.props” - 吾非无心 - 博客园 类/结构最后一个成员为类(string)时可能会出现“堆损坏”(HEAP CORRUPTION DETECTED)错误 GCC在C语言中内嵌汇编 asm __volatile__ QT删除python中的单行注释 double转int QJson 存储(u)longlong有问题 QT QPixmap QImage内存泄漏 QMetaObject::connectSlotsByName: No matching signal for QT数据库连接管理类 QT多重继承带来的问题及解决办法,记录备查 QT6 源码编译Win32 x86 stack smashing detected 莫名其妙的错误 strdump的问题 再加一个realloc的问题 linux下简单封装读写锁 codeblocks下libacl配置 centos8 安装、配置redis6 pyftpdlib中文乱码的解决之道 CentOS8让uwsgi开机自动启动django(无需登录,无需手动) libevent学习一
vc++高精度计时sleep
吾非无心 · 2021-09-06 · via 博客园 - 吾非无心
LARGE_INTEGER high_precision_sleep(LARGE_INTEGER preTime, unsigned long long   sleepTime) {
    LARGE_INTEGER t;
    QueryPerformanceCounter(&t);
    
    while(t.QuadPart-preTime.QuadPart<sleepTime)QueryPerformanceCounter(&t);
    //printf("sleepTime=%d\n", t.QuadPart-preTime.QuadPart);//调试时用来观察每次暂停时间。一般应略有不同才正确
    /*//这种方式与直接返回t精度差不多,但多了一个运算,划不来
preTime.QuadPart += sleepTime; return preTime;*/ return t; }

  使用方法:

LARGE_INTEGER freq,t0,t1,t3;

QueryPerformanceFrequency(&freq);//频率   计数/秒

//当前频率 TIMES_PER_SECOND 下间隔的计数
auto SLEEP_COUNT = freq.QuadPart / TIMES_PER_SECOND;

QueryPerformanceCounter(&t0);
QueryPerformanceCounter(&t3);
for (int i = 0; i < number; i++) {

   //do something

   srand(t3.LowPart);//srand()函数产生一个以当前时间开始的随机种子
  Sleep(rand() %20 );//TIMES_PER_SECOND=30,理论上每次Sleep(33.33ms),但不能Sleep(rand()%30),因为Sleep精度问题,可能实际上超过

  //BitBlt(dcMem, 0, 0, 1920, 1080, dcScreen, 0, 0, SRCCOPY);

  t3=high_precision_sleep(t3, SLEEP_COUNT);

}

QueryPerformanceCounter(&t1);

cout << "执行 "<< number << " 次, 耗时 " << (((t1.QuadPart - t0.QuadPart) * 1000000) / freq.QuadPart)<< " 微秒" << std::endl;

当TIMES_PER_SECOND=30,number=500时,理论耗时:

实际耗时:耗时 16668737 微秒、耗时 16668737 微秒、耗时 16667480 微秒...每次相差不大,在1ms左右