C++?計(jì)算時(shí)間差的五種方法小結(jié)
Qt計(jì)算時(shí)間的兩種方法:
- QTime elapsed() : ms
- QTime currentTime() : ms
C++計(jì)算時(shí)間的五種方法:
- clock() : ms
- GetTickCount() : ms
- gettimeofday(time_val*, NULL) : us
- QueryPerformanceFrequency(LARGE_INTEGER*) & QueryPerformanceCounter(LARGE_INTEGER*) : us
- time(NULL) : s
#include <QThread> #include <QTime> #include <sys/time.h> ? //clock, gettimeofday, time #include <windows.h> ? ?//Sleep, GetTickCount, timeGetTime, QueryPerformanceCounter #include <QDebug> //#pragma comment(lib, "winmm.lib") //timeGetTime, 但是這個(gè)庫Windows或Qt或VS2015都沒有自帶 const unsigned long SLEEP_TIME_MILL = 1000; /** ?* QTime的精度為ms級(jí) ?*/ void calcByQtimeElapsed() { ? ? QTime time; ? ? time.start(); ? ? QThread::msleep(SLEEP_TIME_MILL); ? ? int timeElapsed = time.elapsed(); ? ? qDebug()<<"QTime.start & QTime.elspsed ="<<timeElapsed<<"ms"; } /** ?* QTime的精度為ms級(jí) ?*/ void calcByQtimeCurrentTime() { ? ? QTime startTime = QTime::currentTime(); ? ? QThread::msleep(SLEEP_TIME_MILL); ? ? QTime stopTime = QTime::currentTime(); ? ? int elapsed = startTime.msecsTo(stopTime); ? ? qDebug()<<"QTime.currentTime ="<<elapsed<<"ms"; } /** ?* clock的精度為ms級(jí) ?*/ void calcByClock() { ? ? clock_t startTime = clock(); ? ? Sleep(SLEEP_TIME_MILL); ? ? clock_t endTime = clock(); ? ? clock_t elapsed = endTime - startTime; ? ? qDebug()<<"clock ="<<elapsed<<"ms"; } /** ?* GetTickCount的精度為ms級(jí) ?*/ void calcByTickCount() { ? ? //返回自開機(jī)以來經(jīng)歷的毫秒數(shù) ? ? DWORD startTime = GetTickCount(); ? ? Sleep(SLEEP_TIME_MILL); ? ? DWORD stopTime = GetTickCount(); ? ? DWORD elapsed = stopTime - startTime; ? ? qDebug()<<"GetTickCount = "<<elapsed<<"ms"; } ///** // * timeGetTime的精度為ms級(jí) // * 必須添加Winmm.lib, 否則編譯報(bào)錯(cuò)undefined reference // */ //void calcByTimeGetTime() { // ? ?//返回自開機(jī)以來經(jīng)歷的毫秒數(shù) // ? ?DWORD startTime = timeGetTime(); // ? ?Sleep(SLEEP_TIME_MILL); // ? ?DWORD stopTime = timeGetTime(); // ? ?DWORD elapsed = stopTime - startTime; // ? ?qDebug()<<"timeGetTime = "<<elapsed<<"ms"; //} /** ?* gettimeofday的精度為us級(jí) ?*/ void calcByGetTimeOfDay() { ? ? struct timeval startTime, stopTime; ? ? gettimeofday(&startTime, NULL); ? ? Sleep(SLEEP_TIME_MILL); ? ? gettimeofday(&stopTime, NULL); ? ? long elapsed = (stopTime.tv_sec-startTime.tv_sec) * 1000000 + (stopTime.tv_usec - startTime.tv_usec); ? ? qDebug()<<"gettimeofday ="<<elapsed<<"us"; } /** ?* QueryPerformanceCounter的精度為us級(jí) ?*/ void calcByQueryPerformanceCounter() { ? ? LARGE_INTEGER frequency, startCount, stopCount; ? ? WINBOOL ret; ? ? //返回性能計(jì)數(shù)器每秒滴答的個(gè)數(shù) ? ? ret = QueryPerformanceFrequency(&frequency); ? ? if(ret) { ? ? ? ? ret = QueryPerformanceCounter(&startCount); ? ? } ? ? Sleep(SLEEP_TIME_MILL); ? ? if(ret) { ? ? ? ? QueryPerformanceCounter(&stopCount); ? ? } ? ? if(ret) { ? ? ? ? LONGLONG elapsed = (stopCount.QuadPart - startCount.QuadPart) * 1000000 / frequency.QuadPart; ? ? ? ? qDebug()<<"QueryPerformanceFrequency & QueryPerformanceCounter ="<<elapsed<<"us"; ? ? } } /** ?* time(NULL)精確度為s級(jí) ?*/ void calcByTime() { ? ? time_t startTime = time(NULL); ? ? Sleep(SLEEP_TIME_MILL); ? ? time_t stopTime = time(NULL); ? ? long elapsed = stopTime - startTime; ? ? qDebug()<<"time(NULL) ="<<elapsed<<"s"; } int main(int argc, char *argv[]) { ? ? calcByQtimeElapsed(); ? ? calcByQtimeCurrentTime(); ? ? calcByClock(); ? ? calcByTickCount(); // ? ?calcByTimeGetTime(); ? ? calcByGetTimeOfDay(); ? ? calcByQueryPerformanceCounter(); ? ? calcByTime(); ? ? system("pause"); ? ? return 0; }
到此這篇關(guān)于C++ 計(jì)算時(shí)間差的五種方法小結(jié)的文章就介紹到這了,更多相關(guān)C++ 計(jì)算時(shí)間差內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言中strspn()函數(shù)和strcspn()函數(shù)的對(duì)比使用
這篇文章主要介紹了C語言中strspn()函數(shù)和strcspn()函數(shù)的對(duì)比使用,strspn是計(jì)算屬于字符串的字符數(shù)而strcspn則是判斷不屬于,需要的朋友可以參考下2015-08-08C++分析類的對(duì)象作類成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員
終于到了對(duì)象的初始化和清理的最后階段了,在這里分享一個(gè)cpp里有多個(gè)類時(shí),一個(gè)類的對(duì)象作為另一個(gè)類成員的時(shí)候構(gòu)造函數(shù)和析構(gòu)函數(shù)調(diào)用的時(shí)機(jī)。還有一個(gè)靜態(tài)成員也是經(jīng)??嫉降狞c(diǎn),在這篇博客將會(huì)詳解其概念并舉出案例鞏固,讓我們開始2022-05-05ros項(xiàng)目調(diào)試:vscode下配置開發(fā)ROS項(xiàng)目的詳細(xì)教程
這篇文章主要介紹了ros項(xiàng)目調(diào)試:vscode下配置開發(fā)ROS項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08C++中用new創(chuàng)建二維數(shù)組和指針數(shù)組實(shí)例代碼
這篇文章主要介紹了C++中用new創(chuàng)建二維數(shù)組和指針數(shù)組實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-03-03C語言統(tǒng)計(jì)一串字符中空格鍵、Tab鍵、回車鍵、字母、數(shù)字及其他字符的個(gè)數(shù)(Ctrl+Z終止輸入)
這篇文章主要介紹了C語言統(tǒng)計(jì)一串字符中空格鍵、Tab鍵、回車鍵、字母、數(shù)字及其他字符的個(gè)數(shù)(Ctrl+Z終止輸入) ,需要的朋友可以參考下2018-03-03C語言實(shí)現(xiàn)支持動(dòng)態(tài)拓展和銷毀的線程池
這篇文章主要為大家介紹了C語言實(shí)現(xiàn)支持動(dòng)態(tài)拓展和銷毀的線程池,感興趣的小伙伴們可以參考一下2016-01-01