获取经过时间的确定函数,以毫秒为单位

时间:2010-06-29 08:50:55

标签: c++ time

我已经尝试了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;
}

3 个答案:

答案 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, ...)