一.C++环境
在 C++ 中,可以使用 <chrono> 头文件中的时间库来测量语句执行的时间延迟。以下是一个示例代码,演示如何打印当前语句执行时的时间和最后一句语句执行时的时间:
#include <chrono>
#include <iostream>
// 测量语句执行时间的函数
void measureExecutionTime(const std::string& statement) {
// 获取当前时间
auto startTime = std::chrono::steady_clock::now();
// 执行语句
// 在这里编写你要测量时间延迟的语句
// 获取最后执行时间
auto endTime = std::chrono::steady_clock::now();
// 计算时间差(以毫秒为单位)
auto elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();
// 打印时间信息
std::cout << statement << " 执行时间:" << elapsedTime << " 毫秒" << std::endl;
}
int main() {
// 要测量时间延迟的语句 1
measureExecutionTime("语句 1 执行");
// 要测量时间延迟的语句 2
measureExecutionTime("语句 2 执行");
return 0;
}
在上述示例中,定义了一个 measureExecutionTime 函数,它接受一个字符串作为参数,用于描述要测量时间延迟的语句。在函数内部,使用 std::chrono::steady_clock::now 分别获取当前时间和最后执行时间,并计算时间差。然后,将时间差转换为毫秒数,并打印出语句执行的时间信息。
在 main 函数中,通过调用 measureExecutionTime 函数来测量不同语句的执行时间。将需要测量时间延迟的语句作为参数传递给函数,并根据需要添加更多的语句测量。
二.ROS/C++环境下
思路和上面相同,但是使用的语法不同,下面为毫秒级程序延迟示例:
#include <chrono>
#include <ros/ros.h>
int main(int argc, char **argv)
{
ros::init(argc, argv, "time_measurement_node");
ros::NodeHandle nh;
// 在函数执行前记录开始时间
ros::Time startTime = ros::Time::now();
// 要执行的代码块
// 在函数执行后记录结束时间
ros::Time endTime = ros::Time::now();
// 将时间差转换为毫秒
double executionTime = (endTime - startTime).toSec() * 1000.0;
// 打印函数执行时间(以毫秒为单位)
ROS_INFO("执行时间(毫秒):%f", executionTime);
ros::spin();
return 0;
}
此时就会在执行ROS程序时将程序的延迟时间(ms)打印到终端。如图所示: