2017-05-05 2 views
1

Ich habe ein Programm, das auf zwei verschiedenen Computern läuft: Server und Client. Ich möchte die Latenz über das Netzwerk in meinem Programm in C++ und Java messen. Die normalen Befehle zum Messen der Laufzeit (wie gettimeofday in C) sind meiner Meinung nach für die Lauflatenz über das Netzwerk nicht sehr genau. Ein Ratschlag?Messung der Latenz über das Netzwerk

+1

'normalen Befehle der runtime' zu ​​messen - was Sie sich beziehen? Was ist falsch mit normalem Ping? – Pavel

+0

@Pavel ist meine Frage bearbeiten. Ich beziehe mich auf Befehle wie gettimeofday – PRVS

+0

Möchten Sie die Ende-zu-Ende-Latenz (d. H. Einweg) oder die Round-Trip-Latenz (z. B. Ping) wissen? – Jonas

Antwort

2

können Sie die genaue Zeit messen mit 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(); 

ersetzen microseconds mit nanoseconds, milliseconds, seconds Dauer in verschiedenen Einheiten zu erhalten.

Sie auch können std::clock verwenden, obwohl es weniger genaue Messungen liefern könnten:

#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

Danke für die Antwort !! – PRVS

+0

Dies gilt für Ende-zu-Ende-Latenz? – PRVS

+0

@PRVS Mithilfe von Uhr- oder Chrono-Timern können Sie die Zeitdauer messen, die für bestimmte Aktionen benötigt wird. Wenn Sie also etwas an den Server senden und auf eine Antwort warten, können Sie die Gesamtdauer messen, die ungefähr die Umlaufzeit zwischen Ihnen und Ihrem Server schätzen sollte. – Pavel