各位版友好,有些關於時間方面的問題想請教大家一下
最近在用c++寫簡單的socket程式,內容為Client端每隔幾秒要傳資料給Server端這樣
因為要做研究的關係,我想知道Client每隔1秒或是每隔1.000010秒傳資料給Server
對於我們想知道的結果會有什麼影響, 但是這就是會遇到問題了
就我這幾天網上查的結果, 似乎沒有任何一個function可以達到microsecond等級的暫停
即使我用usleep(1000010)也沒辦法精確的暫停1.000010秒
畢竟系統呼叫usleep()這個function似乎就要1ms到2ms的時間了(?)
對於usleep()我是這樣計算時間的:
#include <iostream>
#include <sys/time.h>
using namespace std;
int main(){
timeval t1, t2;
double elapsedTime;
gettimeofday(&t1, NULL);
usleep(1000010); //睡1.000010秒
gettimeofday(&t2, NULL);
elapsedTime = (t2.tv_sec - t1.tv_sec);
elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000000.0;
cout << elapsedTime << " seconds.\n";
return 0;
}
嘗試多次的結果, elapsedTime還是會比預期多1ms到2ms
不知道這跟系統的timer resolution有沒有關係?
我在MAC OSX上用以下的code所測到timer resolution為3~5 microsecond左右
#include <iostream>
#include <ctime>
#include <unistd.h>
using namespace std;
int main()
{
clock_t t1, t2;
t1 = t2 = clock();
// loop until t2 gets a different value
while(t1 == t2){
t2 = clock();
}
// print resolution of clock()
cout << (double)(t2 - t1) / CLOCKS_PER_SEC * 1000000.0 << " us.\n";
return 0;
}
對於暫停microsecond等級的時間版友有任何想法可以提點一下嗎?
先謝謝各位!