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()またはclock_gettime()代わりにを使用します。

このclock()関数は、使用されたCPU時間を通知するだけです。コードがほとんどの時間をスリープ状態にして何かが起こるのを待っている場合、CPUの使用量はごくわずかです。

ただし、sendto()データグラムをネットワーク層に渡すだけです。リモートシステムがそれを受信するのを待ちません。所要時間を計りたい場合は、返信を待つ必要があります。sendto()それがあなたが考えていたものではない場合、別の代替手段はループを作り、多くの呼び出しを発行するのにかかる時間を計ることです。ただし、これにより、メガバイトのデータをネットワークスタックに渡す効果と混同される可能性が非常に高くなります(UDPの場合、連続する書き込みは合体しません)。

于 2012-04-27T00:16:29.207 に答える