【问题标题】:C++: keeping track of elapsed timeC ++:跟踪经过的时间
【发布时间】:2011-04-29 08:54:12
【问题描述】:
我正在寻找一种方法,能够在任何给定时间了解自从我的程序启动以来已经过了多少时间。一种计时器,它会在主代码执行其他所有操作时继续运行,并且可以随时调用。
上下文是 Windows 上的 OpenGL 应用程序,除了知道正在按下哪些键盘键(使用 glutKeyboardFunc),我还想知道 何时每个键都被按下。所有这些信息都被写入一个 XML 文件,该文件稍后将用于重播用户所做的一切。 (有点像赛车游戏中的回放功能,但更简单)。
【问题讨论】:
标签:
c++
windows
opengl
glut
【解决方案1】:
C++ 11:
#include <iostream>
#include <chrono>
auto start = std::chrono::system_clock::now();
auto end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - start;
std::cout << "elapsed time: " << elapsed_seconds.count() << "s\n";
代码取自 en.cppreference.com 并经过简化。
旧答案:
windows.h 中的GetTickCount() 返回经过的滴答声(毫秒)。
当您的应用启动时,调用此函数并存储其值,然后当您需要知道自程序启动以来经过的时间时,再次调用此方法并从开始值中减去其值。
int start = GetTickCount(); // At Program Start
int elapsed = GetTickCount() - start; // This is elapsed time since start of your program
【解决方案2】:
您不需要为此设置计时器,您可以在应用程序启动时使用time(0) 保存时间戳。每次你想测量时间时你都做同样的事情,你可以只用 init_time - current_time ,你就会得到时间流逝。