各位版友好,有些关于时间方面的问题想请教大家一下
最近在用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等级的时间版友有任何想法可以提点一下吗?
先谢谢各位!