我正在使用UDP客户端向服务器发送消息。我还需要以微秒为单位计算RTT(往返时间)。我有两个变量(t1,t2),我希望将这些时间存储在.t1用于向服务器发送消息并且在客户端收到消息后立即使用t2。然后我想调用像difftime(t1,t2);
这样的函数来显示这个时间差。我有#include <time.h>
作为预处理器,但我不知道我应该为t1和t2使用什么数据类型。在谷歌搜索time.h手册页中,我看到了一些名为suseconds_t
的数据类型(如果我理解正确的话,类似于使用time_t
),但我不确定如何使用它。任何帮助将不胜感激!
答案 0 :(得分:1)
您可以使用struct timeval
和gettimeofday()
。
struct timeval t1, t2;
gettimeofday(&t1, NULL);
// send packet and receive response
gettimeofday(&t2, NULL);
然后你可以使用这样的函数来计算差异:
struct timeval diff_timeval(struct timeval t2, struct timeval t1)
{
struct timeval result;
result.tv_sec = t2.tv_sec - t1.tv_sec; // subtract seconds
result.tv_usec = t2.tv_usec - t1.tv_usec; // subtract microseconds
// microsecond result could be negative, ex. 2.1 - 1.9 = 1 sec - 800000 microseconds
// if so, subtract one second and add 1000000 microseconds
while (result.tv_usec < 0) {
result.tv_usec += 1000000;
result.tv_sec--;
}
return result;
}