2017-05-05 97 views
1

我有一個程序可以運行在兩臺不同的計算機上,如:服務器和客戶端。我想用C++和Java在我的程序中測量網絡中的延遲。測量運行時間的正常命令(例如C中的gettimeofday)我認爲對於網絡上的運行延遲並不是很準確。一些忠告?通過網絡測量延遲

+1

'正常的命令來衡量runtime' - 什麼是你指什麼?普通ping有什麼問題? – Pavel

+0

@Pavel編輯我的問題。我指的是諸如gettimeofday – PRVS

+0

之類的命令您是否想知道端到端延遲(即單向)還是往返延遲(例如ping)? – Jonas

回答

2

您可以測量精確的時間與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(); 

更換microsecondsnanosecondsmillisecondsseconds得到持續時間在不同的單位。

你不妨使用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