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)文章
一些語言的按行讀取文件的代碼實(shí)現(xiàn)小結(jié)
這篇文章主要介紹了一些語言的按行讀取文件的代碼實(shí)現(xiàn)小結(jié),這里羅列了Java和C語言和C++以及PHP的實(shí)現(xiàn)需要的朋友可以參考下2015-08-08
C++分析如何用虛析構(gòu)與純虛析構(gòu)處理內(nèi)存泄漏
虛析構(gòu)和純虛析構(gòu)共性:可以解決父類指針釋放子類對(duì)象,都需要有具體的函數(shù)實(shí)現(xiàn);虛析構(gòu)和純虛析構(gòu)區(qū)別:如果是純虛析構(gòu),該類屬于抽象類,無法實(shí)例化對(duì)象2022-08-08
linux c語言操作數(shù)據(jù)庫(連接sqlite數(shù)據(jù)庫)
linux下c語言操作sqlite數(shù)據(jù)庫實(shí)例方法,大家參考使用吧2013-12-12
FFmpeg實(shí)戰(zhàn)之分離出PCM數(shù)據(jù)
PCM(Pulse?Code?Modulation,脈沖編碼調(diào)制)音頻數(shù)據(jù)是未經(jīng)壓縮的音頻采樣數(shù)據(jù)裸流,它是由模擬信號(hào)經(jīng)過采樣、量化、編碼轉(zhuǎn)換成的標(biāo)準(zhǔn)數(shù)字音頻數(shù)據(jù)。本文將通過FFmpeg實(shí)現(xiàn)分離PCM數(shù)據(jù),感興趣的可以了解一下2023-02-02
C++?OpenCV技術(shù)實(shí)戰(zhàn)之身份證離線識(shí)別
OpenCV身份證離線識(shí)別技術(shù)的主要技術(shù)就是通過OpenCV找到身份證號(hào)碼區(qū)域,然后通過OCR進(jìn)行數(shù)字識(shí)別該區(qū)域的截圖即可得到身份證號(hào)碼。感興趣的可以了解一下2021-12-12
C++數(shù)據(jù)精度問題的解決方案(對(duì)浮點(diǎn)數(shù)保存指定位小數(shù))
對(duì)浮點(diǎn)數(shù)保存指定位小數(shù),怎么解決這個(gè)問題呢?如果有小伙伴對(duì)C++數(shù)據(jù)精度問題的解決方案感興趣的朋友一起看看吧2017-08-08

