在C+的主逻辑中接收实际/用户/系统时间+; 在C++中是否有UNIX时间等价物,它给出了实际的、用户的和系统的执行时间,最好在main中执行?或者,是否有非平凡的方式使用chrono等来实现相同的功能
找不到用于在C+的主逻辑中接收实际/用户/系统时间+; 在C++中是否有UNIX时间等价物,它给出了实际的、用户的和系统的执行时间,最好在main中执行?或者,是否有非平凡的方式使用chrono等来实现相同的功能,c++,C++,找不到用于记录所有三个时间戳的计时用法,但仅记录基于时钟的实时时间 旨在摆脱重定向操作符和可执行文件的耦合,并尝试在main本身中嵌入时间逻辑。 time a.out 2>log.txt使用sys/times.h和clock\u t解决 对于这两种方法,使用times.h记录系统时间sys,对于user记录,时钟的实时性更准确 #include <iostream> #include <sys/times.h> std::string parse_tim(intmax_
记录所有三个时间戳的计时用法,但仅记录基于时钟的实时时间
旨在摆脱重定向操作符和可执行文件的耦合,并尝试在main本身中嵌入时间逻辑。
time a.out 2>log.txt
使用sys/times.h
和clock\u t
解决
对于这两种方法,使用times.h记录系统时间sys
,对于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.h\treal\t" << parse_tim(real_clock) << "\t"
<< "user\t" << parse_tim(user_clock) << "\t"
<< "sys\t" << 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_t\treal\t" << parse_tim(real_dur) << "\t"
<< "user\t" << parse_tim(user_dur) << "\t"
<< "sys\t" << parse_tim(sys_dur) << std::endl;
return 0;
}
请给我们一些代码来说明。顺便提一下<代码> STD::“计时< /代码>”有什么不对?C++标准中没有。C++是一个大帐篷,并非所有的系统都能以这种方式使用时间。可能有一个Unix C调用提供了这一点,但我对您的用处到此为止。快速google查找:@JesperJuhl重新阅读这个问题,我的问题不同,并且有一个关于重定向运算符的片段,我试图避开它。习惯上不在标题中添加任何“已解决”的标记。相反,你应该在你能接受的时候(在超时之后)接受你的答案。
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