1. 程式人生 > >windows 高精度時間獲取

windows 高精度時間獲取

//不好意思,困了,懶得解釋了

//標頭檔案File:TimeTool.h

#ifndef TIMETOOL_H_INCLUDED
#define TIMETOOL_H_INCLUDED

#include <windows.h>

typedef struct PfmTest
{
 LARGE_INTEGER liStart;
 LARGE_INTEGER liEnd;
 LARGE_INTEGER liPerfFreq;
}PfmTest;

/**
 * 
 *@case
 void main()
 {
  printf("開始\n");
  InitPfmTime();

  BeginPfmTime();
  for(int i = 0; i < 10000; ++i);
  double timeInterval = EndPfmTime();
  printf("結束,總用時:%f\n", timeInterval);

  BeginPfmTime();
  for(int i = 0; i < 500; ++i);
  double timeInterval = EndPfmTime();
  printf("結束,總用時:%f\n", timeInterval);

 }
 */
void InitPfmTime();
void BeginPfmTime();
/**
 *@return double 自上次呼叫BeginPfmTime()到本函式之間的時間間隔,單位為 秒(s).
 */
double EndPfmTime();

/**
 * 
 *@case
 void main()
 {
  printf("開始\n");
  LARGE_INTEGER temp;
  InitPfmTimeWithArg(&temp);
  
  BeginPfmTimeWithArg(&temp);
  for(int i = 0; i < 10000; ++i);
  double timeInterval = EndPfmTimeWithArg(&temp);
  printf("結束,總用時:%f\n", timeInterval);

  BeginPfmTimeWithArg(&temp);
  for(int i = 0; i < 500; ++i);
  double timeInterval = EndPfmTimeWithArg(&temp);
  printf("結束,總用時:%f\n", timeInterval);

 }
 */
void InitPfmTimeWithArg(PfmTest * pfmTest);
void BeginPfmTimeWithArg(PfmTest * pfmTest);
double EndPfmTimeWithArg(PfmTest * pfmTest);

#endif //TIMETOOL_H_INCLUDED

//原始檔File:TimeTool.cpp

#include "TimeTool.h"

static PfmTest pfmTest;

void InitPfmTime()
{
 QueryPerformanceFrequency(&(pfmTest.liPerfFreq));
}
void BeginPfmTime()
{
 QueryPerformanceCounter(&(pfmTest.liStart));
}
double EndPfmTime()
{
 QueryPerformanceCounter(&(pfmTest.liEnd)); 
 double timeSecond = (double)(pfmTest.liEnd.QuadPart - pfmTest.liStart.QuadPart) / (double)(pfmTest.liPerfFreq.QuadPart);
 return timeSecond;
}

void InitPfmTimeWithArg(PfmTest * pfmTest)
{
 QueryPerformanceFrequency(&(pfmTest->liPerfFreq));
}
void BeginPfmTimeWithArg(PfmTest * pfmTest)
{
 QueryPerformanceCounter(&(pfmTest->liStart));
}

double EndPfmTimeWithArg(PfmTest * pfmTest)
{
 QueryPerformanceCounter(&(pfmTest->liEnd)); 
 double timeSecond = (double)(pfmTest->liEnd.QuadPart - pfmTest->liStart.QuadPart) / (double)(pfmTest->liPerfFreq.QuadPart);
 return timeSecond;
}

//測試檔案File:App.cpp

#include <stdlib.h>

#include <stdio.h>

#include  "TimeTool.h"

 void main()
 {
  printf("開始\n");
  LARGE_INTEGER temp;
  InitPfmTimeWithArg(&temp);
  
  BeginPfmTimeWithArg(&temp);
  for(int i = 0; i < 10000; ++i);
  double timeInterval = EndPfmTimeWithArg(&temp);
  printf("結束,總用時:%f\n", timeInterval);

  BeginPfmTimeWithArg(&temp);
  for(int i = 0; i < 500; ++i);
  double timeInterval = EndPfmTimeWithArg(&temp);
  printf("結束,總用時:%f\n", timeInterval);

  printf("開始\n");
  InitPfmTime();

  BeginPfmTime();
  for(int i = 0; i < 10000; ++i);
  double timeInterval = EndPfmTime();
  printf("結束,總用時:%f\n", timeInterval);

  BeginPfmTime();
  for(int i = 0; i < 500; ++i);
  double timeInterval = EndPfmTime();
  printf("結束,總用時:%f\n", timeInterval);

 }

相關推薦

windows 精度時間獲取

//不好意思,困了,懶得解釋了 //標頭檔案File:TimeTool.h #ifndef TIMETOOL_H_INCLUDED #define TIMETOOL_H_INCLUDED #include <windows.h> typedef struct P

linux獲取精度時間的方法

編寫linux下應用程式的時候,有時候會用到高精度相對時間的概念,比如間隔100ms。那麼應該使用哪個時間函式更準確呢? 1、time 該函式返回的是自1970年以來的秒數,顯然精度不夠,不能使用 2、gettimeofday

linux 下精度時間

定時器 精度 處理 turn 通過 公司 cti include processor 今天在公司代碼中看到了使用select函數的超時功能作定時器的用法,便整理了如下幾個Linux下的微秒級別的定時器。在我的Ubutu10.10 雙核環境中,編譯通過。 [cpp] vi

Ubuntu上C++精度時間的測量

clock()函式的精確度是10毫秒(ms) times()函式的精確度是10毫秒(ms) gettimofday()函式的精確度是微秒(μs) clock_gettime()函式的計量單位為十億

c/c++ 精度時間測試

測量程式執行時間(ms級) 高精度時控函式QueryPerformanceFrequency(),QueryPerformanceCounter() 原理:QueryPerformanceCounter()這個函式返回高精確度效能計數器的值,它可以以微妙為單位計時.但是Qu

【vc】精度時間函式的使用

方法一: 函式定義如下: int UsSleep(int us);//返回實際的微秒延時時間 程式碼實現如下: 1 //引數一表示 需要等待的時間 微秒為單位 2 int UsSleep(int us) 3 { 4 //儲存計數的聯合 5 LARGE_INTE

【vc】精度時間函數的使用

amp color 定義 定時 表示 per 2個 target title 方法一: 函數定義如下: int UsSleep(int us);//返回實際的微秒延時時間 代碼實現如下: 1 //參數一表示 需要等待的時間 微秒為單位 2 int UsSleep(

linux下的精度時間函式

apue2nd書中 沒有對於linux平臺下時間函式的例子,僅僅是介紹了一下api,不太方便我們使用,這裡找了一些例子, #include <stdio.h>#include <time.h>#include <sys/timeb.h>in

Windows精度微秒級(併發)定時器實現

自從上次封裝微秒延時函式後,利用空閒時間試著封裝一個微秒定時器(類似MFC定時器形式)使用起來效果還不錯。 關於定時器的幾點介紹: 1.設計採用了自動釋放定時器節點方式(增加虛解構函式在內部做相關釋放判斷,即使用完不釋放節點也沒關係); 2

C++中獲得CPU精度時間戳( 納秒級 )

對關注效能的程式開發人員而言,一個好的計時部件既是益友,也是良師。計時器既可以作為程式元件幫助程式設計師精確的控制程式程序,又是一件有力的除錯武器,在有經驗的程式設計師手裡可以儘快的確定程式的效能瓶頸,或者對不同的演算法作出有說服力的效能比較。  在Windows平臺下,常用

Windows下的精度定時器實現及精確時刻獲取

通訊、VOIP、視訊等領域的很多核心技術對時間精度的要求非常高,比如資料採集、時間同步、媒體流平滑控制、擁塞演算法等等,很多技術都是以毫秒為單位來進行計算和控制的。但是Windows設計之初並不是以實時系統為目標的,所以Windows系統的時間精度一直不高,實際最小單位是1

Linux時間子系統之六:精度定時器(HRTIMER)的原理和實現

3.4 size 屬於 running return repr 而是 復雜度 ctu 上一篇文章,我介紹了傳統的低分辨率定時器的實現原理。而隨著內核的不斷演進,大牛們已經對這種低分辨率定時器的精度不再滿足,而且,硬件也在不斷地發展,系統中的定時器硬件的精度也越來越高,這也給

當前本地時間精度

oid end include win point lock OS bsp RR 1 #include <chrono> 2 void current_time() 3 { 4 // 當前時間點 5 std::chrono::syst

windows平臺下的精度定時器

class CHTimerListener { public: virtual void Update() = 0; }; class CHTimer { public: CHTime

Android裝置通過NTRIP協議獲取差分資料實現精度定位

轉載自http://www.jianshu.com/p/7b93952febc0 專案背景 最近在做一個Android的APP專案中有個功能,需要用到Ntrip協議從差分伺服器獲取差分資料,並將差分資料通過藍芽傳送至高精度手持裝置(華信TR502接收機)之後返回固定解的高精度定位資料(NMEA0813協

windows搭建ntp時間伺服器(從上級獲取時間,併為客戶機提供時間

原文連結:https://blog.csdn.net/dsg333/article/details/44854221. 將伺服器型別更改為 NTP。為此,請按照下列步驟操作:a.  單擊“開始”,單擊“執行”,鍵入 regedit,然後單擊“確定”。 b.  找到並單擊下面的

windows bat批處理獲取當前時間

程式碼例項 set d=%date:~0,10% set t=%time:~0,8% echo %d% %t% 解釋 格式: %date:~x,y%以及%time:~x,y% 說明: x是開始位置,y是取得字元數 比如說我要獲取完整的日期和時間, 格式: %d

Windows批處理中獲取系統日期、時間戳記

在寫Windows批處理指令碼時,常常需要獲取系統日期、時間戳記,用作檔名、資料夾名、log等等。 本文介紹瞭如何獲取自訂的系統日期、時間戳記。 首先,在Windows中,系統日期由以下引數獲得: %date% 系統時間則由以下引數獲得: %time% 我們在Win

WINDOWS 時間獲取與精確時間獲取

  對關注效能的程式開發人員而言,一個好的計時部件既是益友,也是良師。計時器既可以作為程式元件幫助程式設計師精確的控制程式程序,又是一件有力的除錯武器,在有經驗的程式設計師手裡可以儘快的確定程式的效能瓶頸,或者對不同的演算法作出有說服力的效能比較。  在Windows平臺下,常用的計時器有兩種,一種是time

Windows/Linux精度計時器(C++)

/* * Linux/Windows 系統高精度計時器 */ #ifndef __LX_TIMER_H__ #define __LX_TIMER_H__ #ifdef WI