Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+的主逻辑中接收实际/用户/系统时间+; 在C++中是否有UNIX时间等价物,它给出了实际的、用户的和系统的执行时间,最好在main中执行?或者,是否有非平凡的方式使用chrono等来实现相同的功能_C++ - Fatal编程技术网

在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