【发布时间】:2019-03-14 16:47:43
【问题描述】:
我正在尝试为我的 C++ 程序创建一个日志文件。我的目标是在我的程序的两个点放置两个时间戳,并在文件中打印这两个点之间的 CPU 时间段。我这样做是因为我想知道我的代码的哪些部分是最耗时的,以便我可以进行改进(所以可能有几块我想要测量的代码)。到目前为止,我已经制作了一个函数,当调用它时,它会将我作为参数传递的字符串打印到文件中:
#define LOGFILE "myprog.log"
void Log (std::string message){
std::ofstream ofs;
ofs.open(LOGFILE, std::ofstream::out | std::ios::app);
ofs << message << std::endl;
ofs.close();
}
但是,我很难弄清楚如何打印 CPU 时间戳。首先,我不知道我应该使用什么时间测量格式(我应该使用 chrono 还是 time_t 类型?)我正在尝试打印一个时间段,所以如果有一个持续时间类型会很有帮助(我我试过 chrono::duration 但它似乎需要 C++11 支持)。其次,鉴于我知道要使用什么类型,如何将其打印到文件中?有没有办法将该类型转换为字符串?或者我可以将它直接传递给我的函数并以某种方式打印吗?
在过去的几天里,这一直困扰着我,我似乎无法弄清楚,所以任何意见都会非常有帮助。提前致谢!
【问题讨论】:
-
一个很好的起点,直到它进入 C++ 标准,是Howard Hinnant's Date library。
-
如果你真的想分析你的程序,为什么不使用为此目的设计的传统工具呢?
-
注意:在胡乱处理日志文件之前花点时间。您花在打开文件等上的时间会影响您的结果。
-
@LIghtnessRacesinOrbit 需要解释一下吗?你到底怎么认为我知道你在说什么?
-
@user4581301 感谢您的提示!
标签: c++ logging time timestamp chrono