在 Qt 中测试一个操作需要多少时间的最简单方法
Posted
技术标签:
【中文标题】在 Qt 中测试一个操作需要多少时间的最简单方法【英文标题】:Easiest way to test how much time an operation takes in Qt 【发布时间】:2013-07-27 14:36:13 【问题描述】:我使用 Qt 4.8,并尝试跨平台(至少在 linux 和 mac 上)。
我需要在 gui 中可视化一个操作需要多少时间。我试过了:
QTime t;
t.start();
functionCall();
qDebug() << t.elapsed() << "ms";
但我读到它不可靠。一些替代品?
抱歉,没有 C++0x
【问题讨论】:
之前有人问过这个问题:***.com/questions/244646/qt-fast-way-to-measure-time 但是,接受且投票最多的答案是错误的。 Qt 没有提供获取 CPU 处理时间的方法。你可以试试<ctime>
,但通常不是那么准确。请参阅我对该问题的回答:***.com/a/13003327/856199
您需要什么样的精度(即您要测量的东西大约持续多长时间)? (“不可靠”听起来很奇怪。可能不够准确,但这是另一个问题。)
@Mat 这里的主要问题是 QTime 不测量代码消耗的 CPU 时间。即使您的代码根本没有运行,它也会测量实际的实时时间。
@NikosC.:OP 想要 CPU 时间而不是挂钟,这是问题中缺少的一个相当大的信息。
什么是最常用的menchmarking? cpu时间?
【参考方案1】:
这不可靠,也不是很准确。请改用QElapsedTimer。
当然,QTime 和 QElapsedTimer 都测量挂钟时间。您需要 QtTest 和 QBENCHMARK in order to get other measures(callgrind、CPU 滴答计数器等),另请参阅 QTest::setBenchmarkResult 函数。
【讨论】:
我认为QBENCHMARK
只能用于单元测试,我需要在应用程序中使用它
您可以在应用程序中使用任何QtTest
功能,只要您与QtTest
库链接即可。
小心QElapsedTimer
。现在似乎有问题(Qt 5.6)——我可以使用objectName.start()
和objectName.elapsed()
,但智能感知并没有弹出这些,只有静态成员。不过,它们确实有效。它似乎发生在定义文件中,而不是标题中。以上是关于在 Qt 中测试一个操作需要多少时间的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章
Qt - 在(从)文件中保存(或加载)qt 变量的最简单和最快的方法
Qt GUI 从另一个类访问 MainWindow 的最简单方法
菜鸟求助,请问QT使用哪个类可以画出那种静态文本框,就是实时显示我要显示的数据的,不需要有编辑功能。