boostライブラリtimerコンポーネントのソースコード分析[大三四八九月実習]

2791 ワード

C++準標準ライブラリに入れることができるソースコードの設計思想を体得します.
 
一、ソースコード
timerはboostライブラリの最初のコンポーネントであり、カプセル化されたソースコードは比較的簡単であり、クラスの要約は以下の通りである.
class timer

{
 public:

         timer(){_start_time =std::clock();}
         void restart(){ _start_time =std::clock(); }
         double elapsed() const{return double (std::clock() - _start_time ) / CLOCKS_PER_SEC;}

         double elapsed_min() const{return double(1) /double(CLOCKS_PER_SEC);}

         double elapsed_max()const{return (double((std::numeric_limits<std::clock_t>::max)()) - double(_start_time) ) /double(CLOCKS_PER_SEC);}

 private:
	std::clock_t _start_time;
}

コードの意味はよく理解できます.昨日コードを直接翻訳しました:boostライブラリtimerコンポーネントアプリケーション
1.std::clock():標準ライブラリ内のライブラリ関数です.この関数は、プロセスが開始されたときから現在の呼び出し自体までのclock数を返します.1秒あたりのclock数はCLOCKS_PER_SEC[windowsの上は1000、Linuxは1000000]
2.std::numeric_limitsは標準ライブラリの限界クラスでありstd::clock_を得るt型の限界値[最大値].
3.前のクラスのメンバー関数の後にconstと「常メンバー関数」を表します.
通常メンバー関数の形式は次のとおりです.
<タイプ説明子><関数名>(<パラメータテーブル>)const;
常メンバー関数には以下の特徴<機能>,[もしあれば,後で再記録に遭遇する]
(1).このようなオブジェクト内のデータ・メンバーの値は、通常メンバー関数内では変更できません.
(2).この通常メンバー関数の内部では、このようなconst以外の関数メンバーを呼び出すことはできません.
(3).このクラスでconstオブジェクトを定義すると、そのオブジェクトはconst以外のメンバー関数にアクセスできません.
 
二、思想
私の理解には限界がある.
クラスには、コンストラクション関数とコンストラクション関数が含まれます.
コンストラクション関数とコンストラクション関数は、システムによって自動的に呼び出されます.
コンストラクション関数は、オブジェクトが定義されているときに[プログラムループプログラムを記述するために必要な初期状態コード]を実行します.構造関数は、オブジェクトの生存期間の終了時に呼び出されます[このような解放が必要なリソースを記述できます].
1.timerはコンストラクション関数を用いてプロセス開始後のclock数を保存する[実質的に期間(clock数/(毎秒返されるclock数CLOCKS_PER_SEC)]
2.不変量[_start_time=std:clock()]を変化した値で初期化または上書きすることで、プログラム内の異なるコード間の期間値[restartを呼び出すたびに、この関数の実行からelapsed関数の呼び出しまでの時間値を出力できる]を得ることができる.
3.C++標準ライブラリ内のデータと関数を呼び出して関数機能を実現する
(1)std::clock()[既存の優秀なライブラリ関数は忘れられないが,クラスはもともと関数よりも大きなフレームワークである]
(2)C++標準ライブラリの数値限界クラスの極大値を呼び出す[C++ライブラリに存在する極大値で,1はC++最大限界値を調べることなく,この値の誤りを心配することなく]C++の最大値を得る.プロセスが開始されたときからtimerコンポーネントオブジェクトを定義した場合、表示できる期間は最大[596.532 h]に達し、プロセスが開始されてからtimerコンポーネントオブジェクトを定義したり、プログラムの途中でrestart関数を使用したりした場合、elapsed_max()が表す時間帯が小さいほど.
この結論は、次のコードでテストできます.
    Sleep(10000);
    cout << "
timeelapsed:"<< t.elapsed()<<"s"; t.restart(); cout << "
timeelapsed:"<< t.elapsed()<<"s"; cout << "
max timespan:"<<t.elapsed_max()/3600 << "h";

 
10 s[10000 ms]遅延後、elapsed_max()出力の値が小さくなり、elapsedの出力値も小さくなります.ここでのプロセスは、現在実行されているアプリケーション全体を指していることがわかります.
 
総じて、この小さなtimerクラスは、コンストラクション関数を使用してデータを初期化し、標準ライブラリ関数を呼び出して関数機能を実現します.私たちが普段よく考えて書いたコードのように.
 
今回のメモは記録済みです.