【发布时间】:2013-08-26 04:42:19
【问题描述】:
谁能解释为什么我总是从下面的代码中得到时间 0?我只想要一个毫秒计时器来计算从套接字发送和接收数据之间的延迟,但无论我尝试什么,我总是得到 0 的结果......我什至尝试了微秒,以防我的系统在不到1 毫秒。
printf("#: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
struct timeval start, end;
unsigned long mtime, seconds, useconds;
gettimeofday(&start, NULL);
n = write(clientSocket,buffer,strlen(buffer));
if (n < 0)
{
error("Error: Unable to write to socket!\n");
}
bzero(buffer,256);
n = read(clientSocket,buffer,255);
gettimeofday(&end, NULL);
seconds = end.tv_sec - start.tv_sec;
useconds = end.tv_usec - start.tv_usec;
mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5;
if (n < 0)
{
error("Error: Unable to read from socket!\n");
}
printf("%s\n",buffer);
printf("Delay: %lu microseconds\n", useconds);
【问题讨论】:
-
因为读取时间可能不到 1 毫秒?
-
“我什至尝试了微秒,以防我的系统在不到 1 毫秒内执行它。”还有其他建议吗?
-
你是如何尝试微秒的? (你知道这些函数实际上没有微秒级分辨率吗?)
-
根据link useconds 是微秒测量变量,我在上面的代码中使用了这个变量。
-
@H2CO3:
gettimeofday在任何体面的系统上都有完整的微秒分辨率。clock_gettime具有完整的纳秒分辨率。