我已经尝试了clock_gettime(CLOCK_REALTIME)
和gettimeofday()
没有运气 - 最基本的就像clock()
一样,0给我的是什么(?)。
但他们都没有计算睡眠时间。我不需要高分辨率计时器,但我需要一些东西来获取以ms为单位的经过时间。
编辑:最终节目:
#include <iostream>
#include <string>
#include <time.h>
#include <sys/time.h>
#include <sys/resource.h>
using namespace std;
// Non-system sleep (wasting cpu)
void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
}
int show_time() {
timeval tv;
gettimeofday(&tv, 0);
time_t t = tv.tv_sec;
long sub_sec = tv.tv_usec;
cout<<"t value: "<<t<<endl;
cout<<"sub_sec value: "<<sub_sec<<endl;
}
int main() {
cout<<show_time()<<endl;
sleep(2);
cout<<show_time()<<endl;
wait(2);
cout<<show_time()<<endl;
}
答案 0 :(得分:4)
你需要再次尝试gettimeofday()
,它肯定会计算挂钟时间,因此它也会在进程休眠时计算。
long long getmsofday()
{
struct timeval tv;
gettimeofday(&tv);
return (long long)tv.tv_sec*1000 + tv.tv_usec/1000;
}
...
long long start = getmsofday();
do_something();
long long end = getmsofday();
printf("do_something took %lld ms\n",end - start);
答案 1 :(得分:2)
您的问题可能与整体划分有关。您需要将其中一个除法操作数转换为float / double,以避免截断十进制值小于一秒。
clock_t start = clock();
// do stuff
// Can cast either operand for the division result to a double.
// I chose the right-hand operand, CLOCKS_PER_SEC.
double time_passed = clock() / static_cast<double>(CLOCKS_PER_SEC);
[编辑]正如所指出的,clock()测量CPU时间(时钟周期/周期),并不适合墙壁定时器测试。如果你想要一个可移植的解决方案,@ see Boost.Timer作为一种可能的解决方案
答案 2 :(得分:1)
你真的想要clock_gettime(CLOCK_MONOTONIC, ...)
。