4

C++ プログラムで何かを実行するのにかかるナノ秒数を取得できるようにしたいと考えています。

オブジェクトの作成、関数がそれを実行する時間など。

ではJava、次の行に沿って何かを行います。

    long now = System.currentTimeMillis();
    // stuff
    long diff = (System.currentTimeMillis() - now);

C++ で同じことを行うにはどうすればよいでしょうか。

4

5 に答える 5

9

標準 C++の<chrono>ライブラリは、これを行う最善の方法を提供します。このライブラリは、クロック用の標準のタイプ セーフな汎用 API を提供します。

#include <chrono>
#include <iostream>

int main() {
    using std::chrono::duration_cast;
    using std::chrono::nanoseconds;
    typedef std::chrono::high_resolution_clock clock;

    auto start = clock::now();
    // stuff
    auto end = clock::now();
    std::cout << duration_cast<nanoseconds>(end-start).count() << "ns\n";
}

クロックの実際の分解能は実装によって異なりますが、このコードは常に結果をナノ秒単位で表示し、実装のティック周期を可能な限り正確に示します。

于 2012-08-07T19:35:14.820 に答える
2

C ++ 11では、クロノライブラリを使用してそれを行うことができます。

クラステンプレートstd::chrono::durationは時間間隔を表します。これは、タイプRepのティック数とティック期間で構成されます。ティック期間は、あるティックから次のティックまでの秒数を表すコンパイル時の有理定数です。

現在、GCC4.5.1で実装されています。(まだVC ++ではありません)。関数呼び出しのIdeone.com実行時間については、cppreference.comのサンプルコードを参照してください。

于 2012-08-07T17:55:15.890 に答える
1

とを見てclockくださいclock_t。あなたが話している解決策については、C++ でのネイティブ サポートはないと思います。意味のある値を取得するには、複数の呼び出しまたは構築の時間を計測するか、プロファイラーを使用する必要があります (望ましい)。

于 2012-08-07T17:03:10.063 に答える
0

私は今日、この正確な質問をしました。現時点で私が持っている最善の解決策は、SDL を使用して次のように呼び出すことです。

uint32 a_time = SDL_GetTicks(); // Return uint32 count of milliseconds since SDL_Init was called

ただし、タイマー機能を使用して SDL を初期化しただけでも、おそらく多くのオーバーヘッドが発生します。(SDL_Init(SDL_INIT_TIMER))。

これが役に立てば幸いです-移植可能であるため、解決策としてこれに落ち着きました。

于 2012-08-07T17:45:31.527 に答える