1

我会简短:

我想测量 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。我应该如何进行?

提前致谢!

4

1 回答 1

2

在 POSIX 系统上,使用gettimeofday()orclock_gettime()代替。

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

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

于 2012-04-27T00:16:29.207 回答