我会简短的说明:
我想测量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。我该怎么办?
提前致谢!
答案 0 :(得分:2)
在POSIX-ish系统上,请改用gettimeofday()
或clock_gettime()
。
clock()
函数仅告诉您已使用了多少CPU时间。如果您的代码大部分时间都在休眠,等待某些事情发生,它将使用非常少的CPU。
但是,sendto()
只会将您的数据报传递给网络层。它不等待远程系统接收它。如果你想花多长时间,你需要等待回复。如果这不是您的想法,另一种选择是制作循环,并计算发出许多sendto()
次呼叫所需的时间。但是,这很可能会产生与将兆字节数据传递到网络堆栈(在UDP的情况下不会合并连续写入)的影响相混淆的结果。