最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)精確延時(shí)的多種方法與性能對比

 更新時(shí)間:2025年07月25日 09:48:44   作者:凌武貳玖  
在C++中實(shí)現(xiàn)精確延時(shí)有多種方法,這篇文中主要為大家介紹了幾種常見的實(shí)現(xiàn)方式,適用于不同場景和精度要求,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1. 標(biāo)準(zhǔn)庫方法

<chrono>高精度延時(shí) (推薦)

#include <chrono>
#include <thread>

void preciseDelay(int milliseconds) {
    auto start = std::chrono::high_resolution_clock::now();
    while (true) {
        auto now = std::chrono::high_resolution_clock::now();
        auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - start).count();
        if (elapsed >= milliseconds) {
            break;
        }
        std::this_thread::sleep_for(std::chrono::microseconds(100)); // 減少CPU占用
    }
}

2. Windows平臺專用方法

高精度定時(shí)器 (Windows API)

#include <windows.h>

void preciseDelayWin(int milliseconds) {
    // 提高系統(tǒng)定時(shí)器精度(1ms)
    TIMECAPS tc;
    timeGetDevCaps(&tc, sizeof(TIMECAPS));
    timeBeginPeriod(tc.wPeriodMin);
    
    LARGE_INTEGER frequency;
    LARGE_INTEGER start;
    LARGE_INTEGER end;
    
    QueryPerformanceFrequency(&frequency);
    QueryPerformanceCounter(&start);
    
    do {
        QueryPerformanceCounter(&end);
    } while ((end.QuadPart - start.QuadPart) * 1000 / frequency.QuadPart < milliseconds);
    
    timeEndPeriod(tc.wPeriodMin);
}

3. Linux平臺專用方法

nanosleep高精度延時(shí)

#include <time.h>

void preciseDelayLinux(int milliseconds) {
    struct timespec ts;
    ts.tv_sec = milliseconds / 1000;
    ts.tv_nsec = (milliseconds % 1000) * 1000000;
    
    int res;
    do {
        res = nanosleep(&ts, &ts);
    } while (res != 0);
}

4. 忙等待實(shí)現(xiàn) (最高精度但最耗CPU)

#include <chrono>

void busyWaitDelay(int milliseconds) {
    auto start = std::chrono::high_resolution_clock::now();
    while (true) {
        auto now = std::chrono::high_resolution_clock::now();
        auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - start).count();
        if (elapsed >= milliseconds) {
            break;
        }
    }
}

5. Qt框架實(shí)現(xiàn)

#include <QElapsedTimer>
#include <QThread>

void qtPreciseDelay(int milliseconds) {
    QElapsedTimer timer;
    timer.start();
    while (timer.elapsed() < milliseconds) {
        QThread::usleep(100); // 減少CPU占用
    }
}

精度比較表

方法精度CPU占用跨平臺備注
<chrono> + sleep1-5ms推薦通用方案
Windows API<1msWindows最佳方案
nanosleep<1msLinux/UnixLinux最佳方案
忙等待<0.1ms100%僅用于極短延時(shí)
Qt實(shí)現(xiàn)1-5msQt項(xiàng)目適用

使用建議

通用場景:使用C++11 <chrono> 庫實(shí)現(xiàn),兼顧精度和可移植性

Windows高精度:使用 QueryPerformanceCounter + timeBeginPeriod

實(shí)時(shí)性要求高:考慮RTOS或?qū)S糜布〞r(shí)器

避免忙等待:長時(shí)間延時(shí)應(yīng)結(jié)合sleep以減少CPU占用

示例:精確500ms延時(shí)循環(huán)

#include <iostream>
#include <chrono>
#include <thread>

int main() {
    for (int i = 0; i < 10; i++) {
        auto start = std::chrono::high_resolution_clock::now();
        
        // 你的任務(wù)代碼
        std::cout << "Task " << i << " executed at " 
                  << std::chrono::system_clock::now().time_since_epoch().count() 
                  << " ns" << std::endl;
        
        // 精確延時(shí)500ms
        auto end = std::chrono::high_resolution_clock::now();
        auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
        if (elapsed < 500) {
            std::this_thread::sleep_for(std::chrono::milliseconds(500 - elapsed));
        }
    }
    return 0;
}

 運(yùn)行結(jié)果如下:

選擇哪種方法取決于你的具體需求、目標(biāo)平臺和精度要求。

到此這篇關(guān)于C++實(shí)現(xiàn)精確延時(shí)的多種方法與性能對比的文章就介紹到這了,更多相關(guān)C++延時(shí)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • opencv提取輪廓大于某個(gè)閾值的圖像

    opencv提取輪廓大于某個(gè)閾值的圖像

    這篇文章主要為大家詳細(xì)介紹了opencv提取輪廓大于某個(gè)閾值的圖像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 一篇文章讓你輕松理解C++中vector和list區(qū)別

    一篇文章讓你輕松理解C++中vector和list區(qū)別

    對于學(xué)c語言的同學(xué)來說,vector和list這兩個(gè)東西經(jīng)常會搞錯(cuò),下面這篇文章主要給大家介紹了關(guān)于C++中vector和list區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • C語言中for循環(huán)問題(一個(gè)小坑需注意)

    C語言中for循環(huán)問題(一個(gè)小坑需注意)

    這篇文章主要給大家介紹了關(guān)于C語言中for循環(huán)問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言中獲取和改變目錄的相關(guān)函數(shù)總結(jié)

    C語言中獲取和改變目錄的相關(guān)函數(shù)總結(jié)

    這篇文章主要介紹了C語言中獲取和改變目錄的相關(guān)函數(shù)總結(jié),包括getcwd()函數(shù)和chdir()函數(shù)以及chroot()函數(shù)的使用方法,需要的朋友可以參考下
    2015-09-09
  • c++和python實(shí)現(xiàn)順序查找實(shí)例

    c++和python實(shí)現(xiàn)順序查找實(shí)例

    這篇文章主要介紹了c++和python實(shí)現(xiàn)順序查找實(shí)例,流程即將目標(biāo)數(shù)值和數(shù)據(jù)庫中的每個(gè)數(shù)值進(jìn)行比較,如果相同則搜索完成,如果不同則繼續(xù)比較下一處,下面來看看具體的實(shí)例操作吧,需要的朋友可以參考一下
    2022-03-03
  • C語言簡明講解歸并排序的應(yīng)用

    C語言簡明講解歸并排序的應(yīng)用

    這篇文章主要介紹了 c語言排序之歸并排序,歸并就是把兩個(gè)或多個(gè)序列合并,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C++中 靜態(tài)局部變量實(shí)例詳解

    C++中 靜態(tài)局部變量實(shí)例詳解

    這篇文章主要介紹了C++中 靜態(tài)局部變量實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • c++ STL容器總結(jié)之:vertor與list的應(yīng)用

    c++ STL容器總結(jié)之:vertor與list的應(yīng)用

    本篇文章對c++中STL容器中的vertor與list的應(yīng)用進(jìn)行了詳細(xì)的分析解釋。需要的朋友參考下
    2013-05-05
  • C++中的explicit關(guān)鍵字實(shí)例淺析

    C++中的explicit關(guān)鍵字實(shí)例淺析

    在C++程序中很少有人去使用explicit關(guān)鍵字,不可否認(rèn),在平時(shí)的實(shí)踐中確實(shí)很少能用的上,再說C++的功能強(qiáng)大,往往一個(gè)問題可以利用好幾種C++特性去解決。接下來給大家介紹 C++中的explicit關(guān)鍵字,需要的朋友可以參考下
    2017-03-03
  • 使用c語言輕松實(shí)現(xiàn)動態(tài)內(nèi)存管

    使用c語言輕松實(shí)現(xiàn)動態(tài)內(nèi)存管

    這篇文章主要介紹了使用c語言輕松實(shí)現(xiàn)動態(tài)內(nèi)存管,本文章內(nèi)容詳細(xì),具有很好的參考價(jià)值,希望對大家有所幫助,需要的朋友可以參考下
    2023-01-01

最新評論

抚远县| 兰溪市| 石楼县| 扶风县| 广元市| 雷州市| 保德县| 云和县| 古交市| 柏乡县| 五家渠市| 罗江县| 沐川县| 扎囊县| 南京市| 永善县| 包头市| 虎林市| 泾阳县| 嵩明县| 临漳县| 夹江县| 革吉县| 时尚| 盖州市| 赣州市| 凭祥市| 云龙县| 阳春市| 石首市| 古丈县| 嵊泗县| 鄂伦春自治旗| 右玉县| 萝北县| 乳山市| 平乡县| 铅山县| 大新县| 神池县| 潞西市|