2017-05-05 7 views
1

私は、ServerとClientのような2つの異なるコンピュータで動作するプログラムを持っています。私は自分のプログラムでC++とJavaでネットワーク上の待ち時間を測定したいと思っています。ランタイムを測定するための通常のコマンド(Cのgettimeofdayなど)は、ネットワーク上の実行待ち時間に対してあまり正確ではないと思います。いくつかのアドバイス?ネットワーク上での待ち時間の測定

+1

runtime'を測定するために、 '通常のコマンド - あなたはを参照していますか?定期的なpingの何が問題なのですか? – Pavel

+0

@Pavelは私の質問を編集しています。私はgettimeofdayなどのコマンドを参照しています – PRVS

+0

エンドツーエンドの待ち時間(一方向)またはラウンドトリップ待ち時間(たとえば、ping)を知りたいですか? – Jonas

答えて

2

あなたは異なる単位で期間を取得するためにnanosecondsmicrosecondsmillisecondssecondsを交換しstd::chrono

#include <chrono> 

auto timeStart = std::chrono::high_resolution_clock::now(); 
// do something... wait for result... 
auto timeEnd = std::chrono::high_resolution_clock::now(); 

long long duration = std::chrono::duration_cast<std::chrono::microseconds>(timeEnd - timeStart).count(); 

で正確な時間を測定することができます。それはあまり正確な測定を提供するかもしれないけれども

あなたにもstd::clockを使用することがあります。

#include <ctime> 

std::clock_t timeStart = std::clock(); 
// do something... wait for result... 
std::clock_t timeEnd = std::clock(); 

double durationMs = 1000.0 * (timeEnd-timeStart)/CLOCKS_PER_SEC; 
+0

答えをありがとう! – PRVS

+0

これはエンドツーエンドのレイテンシに適用されますか? – PRVS

+0

@PRVS時計やクロノタイマーを使って、何らかのアクションを行うのにかかる時間を測定できます。したがって、サーバーに何かを送信して応答を待つと、あなたとサーバーの間のラウンドトリップ時間を概算する必要がある全体的な持続時間を測定できます。 – Pavel

関連する問題