C++ C++;跟踪程序启动后经过的秒数

C++ C++;跟踪程序启动后经过的秒数,c++,time,C++,Time,我正在编写一个将在Solaris机器上使用的程序。我需要一种方法来跟踪程序启动后经过了多少秒。我说的很简单。例如,我会有一个整数秒=0;但是,当每一秒过去时,我将如何更新seconds变量呢 我所看到的一些时间函数似乎只在Windows机器上工作,所以我不确定 如有任何建议,将不胜感激 谢谢您的时间。您只需要存储应用程序启动的日期/时间。每当需要显示程序运行的时间时,获取当前日期/时间并减去应用程序启动的时间。一个非常简单的方法: #include <time.h> time_t s

我正在编写一个将在Solaris机器上使用的程序。我需要一种方法来跟踪程序启动后经过了多少秒。我说的很简单。例如,我会有一个整数秒=0;但是,当每一秒过去时,我将如何更新seconds变量呢

我所看到的一些时间函数似乎只在Windows机器上工作,所以我不确定

如有任何建议,将不胜感激


谢谢您的时间。

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

一个非常简单的方法:

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

double seconds_since_start = difftime( time(0), start);
#包括
开始时间=时间(0);
自启动后的双秒\u=difftime(时间(0),启动);

这样做的主要缺点是您必须轮询更新。您将需要平台支持或其他库/框架来根据事件执行此操作。

您正在倒退。不用担心每秒钟更新一个变量,只需在程序开始时以当前时间初始化一个变量,然后在需要知道已过多少秒时,从初始时间中减去当前时间。这样就大大减少了开销,并且不需要进行一些与时间相关的变量更新

#包括
#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) {}
}
#包括 #包括 使用名称空间std; 无效等待(整数秒); int main() { 开始、结束的时间; 双差; 时间(&开始);//有用的调用 对于(int i=0;i使用

#包括
#包括
int main(int argc,char*argv[])
{
自动启动时间=标准::时钟::高分辨率时钟::现在();
自动当前时钟=标准::时钟::高分辨率时钟::现在();

std::您是否需要每秒钟一次事件?更新一些内容?还是只需要程序运行的总秒数?
time()
返回挂钟时间,
clock()
返回处理器时间。
clock()
也可能有用……因为OP只关心经过的时间,所以可能不需要墙时间。此外,对于长时间运行的程序,
time()
可能会受到NTP漂移、DST、用户更改等因素的影响……这可能会影响结果。@阿拉克,你为什么要删除你的答案?@jheddings老实说,我不太确定答案,Michael解释了不同之处。因此,也许我必须更好地研究库,所以我会给出一个更好的答案。很抱歉这个离题通知毫无疑问,在处理时间时,会有很多微妙的变化,这取决于你想要的时间,你想要的时间有多精确,如果你需要日历形式的时间,等等。但是既然OP“在这里说得很简单”,我觉得没必要把答案弄得太复杂。有时人们只需要一个秒计数器。“护理”一个变量-现在这是一个概念!一个经常被我忽略的性能考虑因素。这里的总的AHA时刻…std::chrono在c++11中是新的,所以您的编译器可能不支持它。我+1想知道您对c++11方法的答案,但不幸的是,在启用c++11的情况下,它没有在我的GCC 4.8.4上编译。尽管使用了
dur,它仍然有效输出中的ation_cast
:std::chrono::duration_cast(当前时间-开始时间)。count()
#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;
}