You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自动编译运行.cpp的批处理脚本计时异常问题求助

批处理计时bug排查与改进方案

现存核心问题

  • 时间计算完全失效:你的PowerShell命令里,$start = Get-Date和$end = Get-Date是重新获取当前时间,根本没用到之前批处理里记录的start和end变量,所以输出的是PowerShell执行这两行代码的耗时,自然会显示极短的时间。
  • 进程等待机制有误差:用tasklist + timeout 1秒循环等待,每次至少会多等1秒,导致计时不准;另外如果系统里有同名进程,还会误判。
  • 日期格式兼容性差:不同Windows系统的%DATE%格式可能不同(比如MM/DD/YYYY或DD/MM/YYYY),你的字符串解析逻辑会出错,导致时间记录失效。

修正后的批处理代码

@echo off
setlocal enabledelayedexpansion

cd TeamCode\src\main\cpp\sources
mkdir ..\exec 2>nul

rem 编译C++程序
gcc -o ..\exec\jpgtest.exe jpg_usage_example.cpp sdk\jpgengine.cpp Position.cpp -lstdc++
if !ERRORLEVEL! NEQ 0 (
    echo 编译失败,终止执行...
    exit /b !ERRORLEVEL!
)

cd ..\exec

rem 用PowerShell直接记录开始时间并运行程序、计算耗时,避免格式兼容问题
powershell -Command "$startTime = Get-Date; & '.\jpgtest.exe'; $endTime = Get-Date; $elapsed = ($endTime - $startTime).TotalSeconds; Write-Output $elapsed" > temp.txt
set /p elapsedTime=<temp.txt
del temp.txt

echo 执行时间: %elapsedTime% 秒

endlocal

改进说明

  1. 直接用PowerShell完成计时全流程:避免批处理日期格式的兼容性问题,同时确保开始时间是程序启动前的时间,结束时间是程序退出后的时间,计时准确。
  2. 去掉冗余的进程等待逻辑:PowerShell的& '.\jpgtest.exe'会等待程序执行完毕再继续,无需手动循环检测进程。
  3. 简化流程:减少中间变量传递的错误,直接在PowerShell内完成计时计算。

测试方法

  • 在你的C++代码里添加一段固定时长的延迟,比如:
    #include <chrono>
    #include <thread>
    // 在保存图片的代码前后添加
    std::this_thread::sleep_for(std::chrono::seconds(3));
    
    重新编译运行批处理,如果输出的执行时间接近3秒(加上程序本身的耗时),说明计时功能正常。

内容的提问来源于stack exchange,提问作者Kadir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:00:25