计算C中的时间跨度

时间:2012-04-27 00:14:02

标签: c timer timespan

我会简短的说明:

我想测量C中的时间跨度,以便在插座中发送这样的小东西:

sendto (s, buffer, sizeof (buffer), 0, (struct sockaddr *) &peer, peerlen);

我目前正在这样做:

clock_t cBegin = (double)clock () * CLOCKS_PER_SEC;
sendto (s, buffer, sizeof (buffer), 0, (struct sockaddr *) &peer, peerlen);
clock_t cEnd = (double) clock() * CLOCKS_PER_SEC;

elapTicks = cEnd - cBegin;
elapMilli = elapTicks/1000;

printf ("Milisegundos: %lf, %lf\n", cBegin, cEnd);

但我的printf总是0.000000。我该怎么办?

提前致谢!

1 个答案:

答案 0 :(得分:2)

在POSIX-ish系统上,请改用gettimeofday()clock_gettime()

clock()函数仅告诉您已使用了多少CPU时间。如果您的代码大部分时间都在休眠,等待某些事情发生,它将使用非常少的CPU。

但是,sendto()只会将您的数据报传递给网络层。它不等待远程系统接收它。如果你想花多长时间,你需要等待回复。如果这不是您的想法,另一种选择是制作循环,并计算发出许多sendto()次呼叫所需的时间。但是,这很可能会产生与将兆字节数据传递到网络堆栈(在UDP的情况下不会合并连续写入)的影响相混淆的结果。