C ++跟踪自程序启动以来经过的秒数

时间:2009-11-14 19:24:24

标签: c++ time

我正在编写一个将在Solaris机器上使用的程序。我需要一种方法来跟踪自程序启动以来经过的秒数。我在这里说的很简单。例如,我将有一个int秒= 0;但是如何在每秒通过时更新秒变量?

似乎我看过的各种时间函数只能在Windows机器上运行,所以我只是不确定。

任何建议都将不胜感激。

感谢您的时间。

5 个答案:

答案 0 :(得分:23)

一种非常简单的方法:

#include <time.h>
time_t start = time(0);

double seconds_since_start = difftime( time(0), start);

这样做的主要缺点是您必须轮询更新。您需要平台支持或其他一些lib /框架才能在事件基础上执行此操作。

答案 1 :(得分:11)

使用std::chrono

#include <chrono>
#include <iostream>

int main(int argc, char *argv[])
{
   auto start_time = std::chrono::high_resolution_clock::now();
   auto current_time = std::chrono::high_resolution_clock::now();

   std::cout << "Program has been running for " << std::chrono::duration_cast<std::chrono::seconds>(current_time - start_time).count() << " seconds" << std::endl;

   return 0;
}

如果你只需要秒的分辨率,那么std::steady_clock就足够了。

答案 2 :(得分:4)

你正在接近它。您不必担心每秒更新变量,只需在程序启动时使用当前时间初始化变量,然后每当您需要知道已经过了多少秒时,就从该初始时间中减去当前时间。这种方式的开销要少得多,并且不需要为一些与时序相关的变量更新。

答案 3 :(得分:1)

#include <stdio.h>
#include <time.h>
#include <windows.h>
using namespace std;
void wait ( int seconds );
int main ()
{
  time_t start, end;
  double diff;
  time (&start); //useful call
  for (int i=0;i<10;i++) //this loop is useless, just to pass some time.
  {
  printf ("%s\n", ctime(&start));
  wait(1);
  }
  time (&end);//useful call

  diff = difftime(end,start);//this will give you time spent between those two calls.
  printf("difference in seconds=%f",diff); //convert secs as u like
  system("pause");
  return 0;
}
void wait ( int seconds )
{
  clock_t endwait;
  endwait = clock () + seconds * CLOCKS_PER_SEC ;
  while (clock() < endwait) {}
}

这也适用于solaris / unix,只需删除win refs

答案 4 :(得分:0)

您只需存储应用程序启动时的日期/时间。每当您需要显示程序运行的时间时,请获取当前日期/时间并减去应用程序启动时间。