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