Measure Time in Milliseconds

0 Comment

最近被Computer and Communication Networks的一份功課虐待中……

話說這份功課其中一條是要在Linux systems中用C或C++寫一個socket program, 用來計算RTT的. 這個RTT是指由client side send一個packet到server side, 再由server side立即送回給client side所需的時間. 因為這個時間很短, 所以至少需要milliseconds…

其他的部分都不算難, 只是基本的setup socket, send & read之類的. 唯一問題是平時見的examples都是TCP的, 但這次用的卻是UDP…….雖然是沒甚麼大差異, 但還是要小心看清楚~

好, 完成後, 卻被時間虐待了……time.h內的time(), clock()甚麼的, 全都不管用!!因為只準確至秒……距離微秒還有一大段路!!

今天, 終於找到答案了……用到的是sys/time.h內的gettimeofdate().

  1. #include <unistd.h>
  2. #include <sys/time.h>
  3.  
  4. /*
  5.   struct timeval的defination: (已定義在sys/time.h)
  6.  
  7.   struct timeval {
  8.     time_t tv_sec;    //秒
  9.     suseconds_t tv_usec;  //毫秒
  10.   }
  11. */
  12.  
  13. int main() {
  14.   struct timeval start, end;    //用來記下開始 & 結束時間的
  15.   long seconds, useconds, time_in_ms;
  16.  
  17.   gettimeofday(&start, NULL);
  18.   gettimeofday(&end, NULL);
  19.  
  20.   seconds = end.tv_sec - starrt.tv_sec;
  21.   useconds = end.tv_usec - start.tv_usec;
  22.   time_in_ms = seconds * 1000 + useconds/1000.0;
  23.  
  24.   return 0;
  25. }

Leave a Comment