zoukankan      html  css  js  c++  java
  • 放出几个珍藏多年的延时函数(高低精度高低性能)

     
     在CODE上查看代码片派生到我的代码片
    1. #include "stdafx.h"  
    2. #include "delay.h"  
    3.   
    4.   
    5.   
    6. void DoEvents()  
    7. {  
    8.     MSG msg;  
    9.     while (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE)) {  
    10.         if (msg.message == WM_QUIT)  
    11.         {  
    12.             return;  
    13.         }  
    14.         TranslateMessage(&msg);  
    15.         DispatchMessage(&msg);  
    16.     }  
    17. }  
    18.   
    19. //@(1)@延时 优点:低cpu;缺点:程序被卡死。  
    20. void NormalDelay(DWORD dwMilliSecond)  
    21. {  
    22.     Sleep(dwMilliSecond);  
    23. }  
    24.   
    25. //@(2)@ 高精度,狂占CPU,单位微秒  
    26. void LowPerformanceHighPrecisionDelay(LONGLONG llMicrosecond)  
    27. {  
    28.   
    29.     LARGE_INTEGER CurrTicks, TicksCount;  
    30.   
    31.     QueryPerformanceFrequency(&TicksCount);  
    32.     QueryPerformanceCounter(&CurrTicks);  
    33.   
    34.     TicksCount.QuadPart = TicksCount.QuadPart * llMicrosecond / 1000000ll;  
    35.     TicksCount.QuadPart += CurrTicks.QuadPart;  
    36.     while (CurrTicks.QuadPart < TicksCount.QuadPart)  
    37.     {  
    38.         QueryPerformanceCounter(&CurrTicks);  
    39.     }  
    40. }  
    41.   
    42.   
    43.   
    44. DWORD WINAPI DelayInThread(LPVOID lpParam)  
    45. {  
    46.     DWORD* pMillSecond = (DWORD*)lpParam;  
    47.     Sleep(*pMillSecond);  
    48.     return 0;  
    49. }  
    50.   
    51.   
    52. //@(3)@多线程实现的不卡死、低cpu,低精度  
    53. BOOL HighPerformanceLowPrecisionDelayDelay(DWORD dwMilliSecond)  
    54. {  
    55.     HANDLE hThread;  
    56.     DWORD  RethThread;  
    57.     hThread = ::CreateThread(nullptr, 0, DelayInThread, &dwMilliSecond, 0, &RethThread);  
    58.     if (hThread == NULL)  
    59.     {  
    60.         return FALSE;  
    61.     }  
    62.   
    63.     for (;;)  
    64.     {  
    65.         DoEvents();  
    66.   
    67.         if (WAIT_TIMEOUT == WaitForSingleObject(hThread, 1))  
    68.         {  
    69.         }  
    70.         else  
    71.         {  
    72.             break;  
    73.         }  
    74.     }  
    75.     CloseHandle(hThread);  
    76.     return TRUE;  
    77. }  
    78.   
    79.   
    80.   
    81.   
    82. //不卡死、低cpu,高精度延时,毫秒  
    83. BOOL HighPerformanceHighPrecisionDelay(UINT64 n64MilliSecond)  
    84. {  
    85.     HANDLE hTimer;  
    86.     LARGE_INTEGER liDueTime;  
    87.   
    88.     liDueTime.QuadPart = -10 * n64MilliSecond * 1000LL;  
    89.   
    90.     DoEvents();  
    91.   
    92.     hTimer = CreateWaitableTimer(nullptr, FALSE, nullptr);  
    93.     if (NULL == hTimer)  
    94.     {  
    95.         return  FALSE;  
    96.     }  
    97.   
    98.     if (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0))  
    99.     {  
    100.         //printf("SetWaitableTimer failed (%d) ", GetLastError());  
    101.         return FALSE;  
    102.     }  
    103.   
    104.     DWORD ret;  
    105.     while (ret = MsgWaitForMultipleObjects(1, &hTimer, FALSE, INFINITE, QS_ALLINPUT) != WAIT_OBJECT_0)  
    106.     {  
    107.         if (((WAIT_OBJECT_0 + 1) == ret) || (WAIT_TIMEOUT == ret))  
    108.         {  
    109.             DoEvents();  
    110.         }  
    111.         else  
    112.         {  
    113.             //WAIT_TIMEOUT,WAIT_FAILED  
    114.             break;  
    115.         }  
    116.     }  
    117.   
    118.     CancelWaitableTimer(hTimer);  
    119.   
    120.     CloseHandle(hTimer);  
    121.   
    122.     DoEvents();  
    123.   
    124.     return TRUE;  
    125.   
    126. }  

    http://blog.csdn.net/x356982611/article/details/50922697

  • 相关阅读:
    Review Python装饰器
    Python自动化开发三元运算 列表解析 生成器表达式
    Python自动化开发函数02
    Python自动化开发函数03
    Python自动化开发文件
    ELK02ELK收集Linux系统平台应用系统日志
    ELK01Elasticsearch
    html5调用摄像头并拍照
    Docker 安装 PostgreSQL
    《TensorFlow+Keras自然语言处理实战》图书介绍
  • 原文地址:https://www.cnblogs.com/findumars/p/5342082.html
Copyright © 2011-2022 走看看