添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

很多编程用的IDE在调试时,当程序结束时会有类似 [Finished in 0.012s] 字样来统计程序运行总时长,在有些情况我们需要用到这样一个小功能,在此我将用Fortran实现这样一个小程序。

  • runtime 后的命令行整体作为目标命令在框架内执行。
  • 在执行目标命令前后获取系统时间(精确到毫秒)相减得到目标命令运行时长。
  • 命令行处理
  • character(len=1024) :: cmd_line
    character(len=64) :: args(16)
    integer :: i, narg, time(0:1)
    narg = iargc()
    do i = 1, narg
        call getarg(i,args(i))
    end do
    write(cmd_line,"(TR1,16A)") args(1:narg) ! 由输入参数拼接出目标指令
    
  • 执行命令行前后获取系统时间
  • call system_clock(time(0))
    call system(cmd_line)
    call system_clock(time(1))
    
  • 计算并输出时长信息
  • write(*,"('[Finished in ',(F0.3),'s]')") real(time(1)-time(0))/1000
    
    program main
        ! Execute program and count it's running time.
        ! Usage: runtime [command]
        ! Author: ph
        ! Email: huipan.hnu@qq.com
        ! Date: 2017.08.14
        implicit none
        character(len=1024) :: cmd_line ! 规定了命令行最大长度
        character(len=64) :: args(16) ! 规定了每个参数的最大长度
        integer :: i, narg, time(0:1)
        narg = iargc()
        do i = 1, narg
            call getarg(i,args(i))
        end do
        write(cmd_line,"(TR1,16A)") args(1:narg)
        call system_clock(time(0))
        call system(cmd_line)
        call system_clock(time(1))
        write(*,"('[Finished in ',(F0.3),'s]')") real(time(1)-time(0))/1000
    end program main
    gfortran runtime.f90 -o runtime
    ./runtime xxx
  • 命令行处理 iargc()获取参数个数。
  • call getarg(i, arg)获取第i个参数。
  • 字符串处理 write(str_variable, format) variables将变量列表variables按照指定格式format输入到字符串变量str_variable中。
  • write(unit, fmt)的格式化输出。
  • 获取系统日期和时间 call system_clock(count [, count_rate] [, count_max])从系统时钟获取当前时间,count为整型变量,存储当天时间到毫秒。如果要计算长时间运行的程序时间,则需要添加count_max参数来增大统计上限或者改用data_and_time
  •