在C++的主逻辑中接收真实/用户/系统时间
Receiving real/user/system times within main logic of C++
C++中是否有等效的UNIX时间,它给出了真实的,用户和系统的执行时间,最好在main中?还是有没有非平凡的方法可以使用 chrono 等来实现相同的功能?
找不到record all three timestamps
的时间用法,但only the real time based on timeclock
链接。
旨在摆脱重定向运算符与可执行文件相结合,并尝试在 main 本身中嵌入时间逻辑。 time a.out 2> log.txt
使用 sys/times.h
和 clock_t
求解。
对于这两种方法,系统时间sys
都是使用 times.h 记录的,而clock_t的 REALTIME 对于user
记录更准确。
#include <iostream>
#include <sys/times.h>
std::string parse_tim(intmax_t milliseconds) {
std::string parsed;
intmax_t s = milliseconds / 1000;
intmax_t m = s / 60;
intmax_t h = m / 60;
intmax_t d = h / 24;
if(d > 0)
parsed = parsed + std::to_string(d) + "d";
if(! parsed.empty() || h > 0)
parsed = parsed + std::to_string(h%24) + "h";
if(! parsed.empty() || m > 0)
parsed = parsed + std::to_string(m%60) + "m";
parsed = parsed + std::to_string(s%60) + ".";
parsed = parsed + std::to_string(milliseconds%1000) + "s";
return parsed;
}
int main(int argc, char** argv) {
static struct tms st_cpu, en_cpu;
struct timespec ts1, tw1, ts2, tw2;
static clock_t st_time = times(&st_cpu);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts1);
clock_gettime(CLOCK_REALTIME, &tw1);
// Perform operations
// Perform operation
// Perform actions
static clock_t en_time = times(&en_cpu);
clock_gettime(CLOCK_REALTIME, &tw2);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts2);
auto real_clock = (intmax_t)(en_time - st_time) * 10;
auto user_clock = (intmax_t)(en_cpu.tms_utime - st_cpu.tms_utime) * 10;
auto sys_clock = (intmax_t)(en_cpu.tms_stime - st_cpu.tms_stime) * 10;
std::cerr << "time.htrealt" << parse_tim(real_clock) << "t"
<< "usert" << parse_tim(user_clock) << "t"
<< "syst" << parse_tim(sys_clock) << std::endl;
auto real_dur = intmax_t(1000.0*tw2.tv_sec + 1e-6*tw2.tv_nsec - (1000.0*tw1.tv_sec + 1e-6*tw1.tv_nsec));
auto user_dur = intmax_t(1000.0*ts2.tv_sec + 1e-6*ts2.tv_nsec - (1000.0*ts1.tv_sec + 1e-6*ts1.tv_nsec));
auto sys_dur = intmax_t(en_cpu.tms_stime - st_cpu.tms_stime) * 10;
std::cerr << "clock_ttrealt" << parse_tim(real_dur) << "t"
<< "usert" << parse_tim(user_dur) << "t"
<< "syst" << parse_tim(sys_dur) << std::endl;
return 0;
}
time ./a.out
time.h real 4m2.460s user 5m57.140s sys 21.830s
clock_t real 4m2.457s user 6m18.976s sys 21.830s
real 4m2.498s
user 6m22.816s
sys 0m26.865s
相关文章:
- 激励'inline'说明符的真实世界示例?
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 在C++中,我如何接受不同于同一行的用户输入
- 当用户超过按钮点击限制时报告
- Visual C++(VS2017)中用户定义的转换不明确
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 当用户键入分隔符时,停止getline()输入
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 在C++的主逻辑中接收真实/用户/系统时间