计算耗时为微秒的方法(包含:时/分/秒/毫秒/微秒/纳秒)

本文介绍了五种在C++和Qt环境中计算代码执行时间的方法,包括使用QueryPerformanceCounter、QDateTime、QTime、chrono库以及QElapsedTimer。这些方法可以精确到微秒级别,适用于性能测试和调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算耗时为微秒的方法1

#include<stdio.h>
#include <windows.h>
int main() {
	int a[10002];
	int i = 0;
	double run_time;
	_LARGE_INTEGER time_start;	//开始时间
	_LARGE_INTEGER time_over;	//结束时间
	double dqFreq;		//计时器频率
	LARGE_INTEGER f;	//计时器频率
	QueryPerformanceFrequency(&f);
	dqFreq=(double)f.QuadPart;
	QueryPerformanceCounter(&time_start);	//计时开始
	for( i = 1; i <= 10000; i++)a[i]=i;	//要计时的程序
	QueryPerformanceCounter(&time_over);	//计时结束
	run_time=1000000*(time_over.QuadPart-time_start.QuadPart)/dqFreq;
	//乘以1000000把单位由秒化为微秒,精度为1000 000/(cpu主频)微秒
	printf("\nrun_time:%fus\n",run_time);
	return 0;
}

计算耗时为微秒的方法2

#include <QDateTime>

int main()
{
    // 获取当前时间
    QDateTime startTime = QDateTime::currentDateTime();

    // 执行需要计时的代码
    // ...

    // 获取当前时间
    QDateTime endTime = QDateTime::currentDateTime();

    // 计算执行时间
    qint64 elapsedTime = startTime.msecsTo(endTime);
    qDebug() << "Elapsed time: " << elapsedTime << " microseconds";
    return 0;
}

在上述代码中,使用了 QDateTime 类来获取当前时间,然后计算执行时间,最后输出结果。通过使用 msecsTo() 方法可以获取毫秒级别的时间差,然后可以将其转换为微秒级别。

方法3--QTime

#include <QTime>

// 计算代码执行时间并返回微秒
int calcExecTime() {
    QTime timer;
    timer.start();
    // 这里放需要计时的代码
    // ...
    return timer.elapsed();
}

// 示例代码
int main() {
    int elapsed = calcExecTime();
    qDebug() << "代码执行时间:" << elapsed << "微秒";
    return 0;
}

在上面的代码中,我们使用了Qt的QTime类来计算代码执行时间。在函数calcExecTime()中,我们使用timer.start()开始计时,然后运行需要计时的代码,最后使用timer.elapsed()返回代码执行时间。在主函数中,我们调用calcExecTime()并打印出代码执行时间即可。

方法4---使用C++标准库中的chrono库来计算耗时

#include <iostream>
#include <chrono>

int main() {
    auto start = std::chrono::high_resolution_clock::now(); // 记录开始时间

    // 执行需要计时的代码
    int sum = 0;
    for (int i = 0; i < 1000000; ++i) {
        sum += i;
    }

    auto end = std::chrono::high_resolution_clock::now(); // 记录结束时间
    auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start); // 计算耗时

    std::cout << "耗时:" << duration.count() << "微秒" << std::endl; // 输出耗时
    return 0;
}

其中:

std::chrono::high_resolution_clock是C++标准库提供的一个高精度时钟,可以在微秒、纳秒级别上测量时间。

std::chrono::duration_cast函数可以将时间差转换为指定单位的时间长度。

以上代码中,startend分别记录了需要计时代码的开始和结束时间,计算出时间差之后再通过duration.count()获取总的耗时,单位为微秒。

注意:

如果不想用auto start/end ,那可以改成

std::chrono::time_point<std::chrono::steady_clock> start=std::chrono::high_resolution_clock::now();

std::chrono::time_point<std::chrono::steady_clock> end=std::chrono::high_resolution_clock::now();

方法5-QT中使用C++语言计算耗时的示例代码。使用QElapsedTimer来计算代码块的执行时间,精确到微秒

#include <QCoreApplication>
#include <QElapsedTimer>
#include <iostream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QElapsedTimer timer;
    timer.start();

    // 计算代码块的执行时间
    long long sum = 0;
    for (int i = 0; i < 100000000; i++) {
        sum += i;
    }

    // 输出执行时间,单位为微秒
    std::cout << "Time elapsed: " << timer.nsecsElapsed() / 1000 << "us" << std::endl;

    return a.exec();
}

在这个示例中,我们使用了一个for循环,计算从0到99999999的所有整数的总和。在计算完成后,我们使用nsecsElapsed()函数来获取代码块的执行时间,单位为纳秒,将其除以1000转换为微秒。

其中,QElapsedTimer类可以在头文件<QElapsedTimer>中找到,使用方法如下:

  1. 调用start()方法开始计时;
  2. 执行耗时操作;
  3. 调用nsecsElapsed()方法获取耗时时间(单位为纳秒);
  4. 将纳秒数除以1000得到微秒数。

最后,将计算得到的微秒数输出即可。

我想在c++中获得代码运行间,我该怎么做 回答 好的,用户想知道在C++中如何测量代码的执行间,需要具体的方法和示例代码。首先,我需要回忆一下相关的知识。根据提供的引用,C++中有几种不同的方法,主要涉及<chrono>库和其他传统方法,比如GetTickCount()。用户可能需要了解这些方法的具体使用步骤,以及各自的优缺点。 首先,用户可能希望知道最现代和推荐的方法,也就是C++11引入的<chrono>库,这个库提供了高精度的间测量功能。引用1、4都提到了这一点,所以应该先介绍这个方法。然后,可能还需要提到其他方法,比如使用clock()函数或者Windows API的GetTickCount(),但这些可能不如<chrono>准确或跨平台。 接下来,我需要考虑如何组织这些方法,可能按照推荐程度或使用场景来排序。比如先介绍<chrono>库的方法,因为它是最新且跨平台的,然后介绍传统的方法,如clock()和Windows特定的方法。同,每个方法都需要给出示例代码,这样用户可以直接复制使用。 另外,用户可能需要知道如何选择不同的间单位,比如毫秒微秒等,这在使用<chrono>库是如何处理的。引用3中的示例展示了如何创建以微秒为单位的计对象,这可能需要详细说明一下。 还要注意代码的正确性,比如在<chrono>中使用high_resolution_clock还是steady_clock,根据引用中的示例,通常使用high_resolution_clock。此外,需要确保示例代码的语法正确,比如正确包含头文件和使用命名空间。 还有,用户可能对性能的注意事项感兴趣,比如多次测量取平均值,避免其他进程干扰等,这些可以作为优化建议提到。 最后,生成相关问题的候,要围绕间测量的方法、不同方法的区别、如何选择间单位以及优化测量准确性等方面来提问,帮助用户进一步深入理解。 如何在 C++ 中测量代码执行间? 在 C++ 中测量代码执行间有几种常用方法,主要为两类:C++11 标准库方法和平台相关方法。以下是具体实现步骤及示例代码: 方法 1:使用 C++11 的 <chrono> 库(推荐) 这是最现代、跨平台且高精度的方法,支持纳秒微秒毫秒等多种间单位。 示例代码: Cpp #include <iostream> #include <chrono> // 必须包含的头文件 int main() { // 记录开始间点 auto start = std::chrono::high_resolution_clock::now(); // 待测代码段 for (int i = 0; i < 100000; ++i) { // 模拟耗时操作 } // 记录结束间点 auto end = std::chrono::high_resolution_clock::now(); // 计算间差并转换为毫秒 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start); std::cout << "耗时: " << duration.count() << " 毫秒" << std::endl; return 0; }加上using namespace std;并且简化一下
最新发布
04-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林中青木

原创不易,请多多支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值