C++のctimeヘッダのclock関数から得られる値が予想と違った値になる


C++初心者です。  
下のソースコードは独習C++ 第4版の第2章例2.1の3にデバッグ用にcoutをいくつか足したものです。  
timer型オブジェクトの作成から破棄までの時間を計測しています。

実行から1秒以上経過したあとにエンターキーを押してもclock関数から得られる値が予想と違ったものになっており、正しい経過時間を計算することができません。  
予想としては end-start
の値がCLOCKS_PER_SEC(1000000)の値より大きくなると思うのですが、実行してみるとendの値が3526、startの値が3402となっており、全く違ったものになります。

初歩的な質問であると思いますが、ご教授お願い致します。

[code]

    #include <iostream>
    #include <ctime>
    using namespace std;
    
    class timer {
      clock_t start;
    public:
      timer();
      ~timer();
    };
    
    timer::timer() {
      start = clock();
      cout << "start:" << start << "\n";
    }
    
    timer::~timer() {
      clock_t end;
      end = clock();
      cout << "end:" << end << "\n";
      cout << "経過時間:" << (end - start)  / CLOCKS_PER_SEC << "\n";
      cout << "CLOCKS_PER_SEC:" << CLOCKS_PER_SEC << "\n"; 
    }
    
    int main() {
      timer ob;
      char c;
    
      cout << "最後がエンターになるようにキーを入力:";
      cin >> c;
    
      return 0;
    }
    
[/code]

実行結果

[code]

    start:3402
    最後がエンターになるようにキーを入力:1234
    end:3526
    経過時間:0
    CLOCKS_PER_SEC:1000000
    
[/code]

環境

[code]

    $ g++ --version
    Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr ->-with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/D>eveloper/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1
    Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
    Target: x86_64-apple-darwin14.0.0
    hread model: posix
    
[/code]




ctime の clock() は、プログラムが処理を行った時間を返します。cin で入力を待っている間は、OS
に処理を任せているので、プログラム自身は処理を行っていません。つまり、どんなに長く待っても処理時間は増えません。

経過時間を求めたいなら、ctime の time() を使う手がありますが、返す時間が秒単位なのでつまらないかもしれません。

C++ 11 をお使いなら、新しい chrono の関数が使えます。

[code]

    #include <iostream>
    #include <chrono>
    
    using namespace std;
    using namespace std::chrono;
    
    int main()
    {
        // 開始時
        const steady_clock::time_point start = steady_clock::now();
    
        // 入力待ち
        char c;
        cout << "Enter something> ";
        cin >> c;
    
        // 終了時
        const steady_clock::time_point end = steady_clock::now();
    
        // 経過時間の計算
        duration<double> elapsed = duration_cast<duration<double>>(end - start);
    
        // 経過時間の表示
        cout << elapsed.count() << " seconds." << endl;
    
        return 0;
    }
    
[/code]




ctime の clock() は、プログラムが処理を行った時間を返します。cin で入力を待っている間は、OS
に処理を任せているので、プログラム自身は処理を行っていません。つまり、どんなに長く待っても処理時間は増えません。

経過時間を求めたいなら、ctime の time() を使う手がありますが、返す時間が秒単位なのでつまらないかもしれません。

C++ 11 をお使いなら、新しい chrono の関数が使えます。

[code]

    #include <iostream>
    #include <chrono>
    
    using namespace std;
    using namespace std::chrono;
    
    int main()
    {
        // 開始時
        const steady_clock::time_point start = steady_clock::now();
    
        // 入力待ち
        char c;
        cout << "Enter something> ";
        cin >> c;
    
        // 終了時
        const steady_clock::time_point end = steady_clock::now();
    
        // 経過時間の計算
        duration<double> elapsed = duration_cast<duration<double>>(end - start);
    
        // 経過時間の表示
        cout << elapsed.count() << " seconds." << endl;
    
        return 0;
    }
    
[/code]

