用C

2012-04-27 49 views
1

計算的時間跨度,我會盡量簡短:用C

我想衡量這樣的小東西在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

你的問題之一是你應該用* CLOCKS_PER_SEC分隔*而不是乘。 – dreamlax 2012-04-27 00:17:36

回答

2

在POSIX-ish系統上,改爲使用gettimeofday()clock_gettime()

clock()函數只會告訴您使用了多少CPU時間。如果你的代碼大部分時間都在睡覺,等待一些事情發生,它將使用很少的CPU。

但是,sendto()只將您的數據報傳遞到網絡層。它不會等待遠程系統接收它。如果你想要花費多長時間,你需要等待回覆。如果這不是你想要的,另一種選擇是做一個循環,然後花費多少時間來發出很多呼叫sendto()。然而,這很可能會給結果帶來混淆,即將兆字節的數據傳遞到網絡堆棧中(對於UDP,不會合並連續寫入)。

+0

非常感謝。關於sendto操作的評論甚至更多。關於時鐘功能,我應該改變它的clock_gettime()? – 2012-04-27 00:56:44

+0

此功能適用於C還是C++? – 2012-04-27 01:08:32

+0

@PedroDusso:他們將使用C或C++。 – dreamlax 2012-04-27 01:21:17