I.はじめに
プログラムを作成する過程で、時間のかかるプログラムステートメントの実行をテストする必要がある場合があります。現在、使用できるライブラリは多数あり、提供できる優れたクロスプラットフォームライブラリはありません。一般的にはこれです。一種のコードもありますそれはシステムのライブラリを呼び出す私たちのプログラマーによって行われますが、不十分な精度やクロスプラットフォームの非サポートなどの問題がしばしばあります; C ++ 11はブーストでクロノライブラリを導入します;それはできます高精度のクロックを実現し、ナノ秒レベルを実現できます;
Two.chronoライブラリ
クロノでは、time_pointテンプレートクラスは、基本的な算術演算をサポートする時点を表すために使用されます。異なるクロックは、対応するタイプの時点を返します。
絶対時点を取得する必要がある場合はsystem_clockを使用し、時間間隔を取得する必要があり、システム時刻の変更の影響を受けない場合はsteady_clockを使用します。
3.練習
例1:
操作結果:
例1コード:
#ifndef _TimerClock_hpp_
#define _TimerClock_hpp_
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
class TimerClock
{
public:
TimerClock()
{
update();
}
~TimerClock()
{
}
void update()
{
_start = high_resolution_clock::now();
}
//获取秒
double getTimerSecond()
{
return getTimerMicroSec() * 0.000001;
}
//获取毫秒
double getTimerMilliSec()
{
return getTimerMicroSec()*0.001;
}
//获取微妙
long long getTimerMicroSec()
{
//当前时钟减去开始时钟的count
return duration_cast<microseconds>(high_resolution_clock::now() - _start).count();
}
private:
time_point<high_resolution_clock>_start;
};
#endif
int main()
{
TimerClock TC;
int sum = 0;
TC.update();
for (int i = 0; i > 100000; i++)
{
sum++;
}
cout << "cost time:" << TC.getTimerMilliSec() << "ms" << endl;
cout << "cost time:" << TC.getTimerMicroSec() << "us" << endl;
return 0;
}
4.時間処理
4.1関連するクラス
SYSTEM_CLOCK (主な関心事)、steady_clock、high_resolution_clockの
time_pointの
期間
秒、他の時間の表現クラス
4.2関連する機能
4.3現在の時刻を取得する方法
例2
例2のコード:
#include <chrono>
#include <iostream>
using namespace std;
int main()
{
// 获取当天的时间
auto curTimePoint = chrono::system_clock::now();
// 获取当前的时间戳
cout<<"获取当前的时间戳:";
cout << curTimePoint.time_since_epoch().count() << endl;
// 把当前时间向后推10秒钟
auto d1 = chrono::seconds(10);
auto time2 = curTimePoint + d1;
cout<<"把当前时间向后推10秒钟:";
cout << time2.time_since_epoch().count() << endl;
// 转为经过的小时
cout<<"转为经过的小时:";
cout << chrono::duration_cast<chrono::hours>(time2.time_since_epoch()).count() << endl;
//转为time_t的结构
cout<<"转为time_t的结构:";
time_t t = chrono::system_clock::to_time_t(time2);
cout << t << endl;
}
5つの期間
期間は次のように定義されます。
ここで、Repは、整数または小数の算術タイプのカウント時間を表します。たとえば、doubleに設定されている場合は、小数でタイミングが調整されることを意味します。期間は、含まれる期間タイプを表します。これは、ドキュメントに記載されているさまざまな期間単位の定義など、さまざまな期間タイプの変換に一般的に使用されます。
期間のタイミング単位を変更するには、duration_castを使用できます。
例3:
std :: chrono :: time_pointタイプを返します。デフォルトでは、durationは現在の期間の秒数を記録します。Chrono
は3つのクロックを提供します。通常、 system_clockが使用されます。高精度が必要な場合は、high_resolution_clockの例3のコードを使用し
ます。
#include <iostream>
#include <chrono>
#include <thread>
#include <ratio>
using namespace std;
int main()
{
//auto start = chrono::system_clock::now();
auto start = chrono::high_resolution_clock::now();
std::this_thread::sleep_for(std::chrono::seconds(1));
//auto end = chrono::system_clock::now();
auto end = chrono::high_resolution_clock::now();
std::chrono::duration<double> diff = end - start;
auto nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start);
chrono::duration<double, std::nano> fp_nanos = end - start;
cout<<"use "<<diff.count()<<" s\n";
cout<<"use "<<nanos.count()<<" nanos\n";
cout<<"use "<<fp_nanos.count()<<" nanos\n";
return 0;
}
参照ブログ投稿:https
://mp.weixin.qq.com/s/ZZPTOJ5qFe2lKfSWThQx-w参照ブログ投稿:https://mp.weixin.qq.com/s/dtEELMznaeI5cvvHOghQRA
参照ブログ投稿:https:// www。 jianshu.com / p / 0ccbf45491de