【问题标题】:Easiest way to test how much time an operation takes in Qt在 Qt 中测试一个操作需要多少时间的最简单方法
【发布时间】:2013-07-27 14:36:13
【问题描述】:

我使用 Qt 4.8,并尝试跨平台(至少在 linux 和 mac 上)。

我需要在 gui 中可视化一个操作需要多少时间。我试过了:

QTime t;
t.start();
functionCall();
qDebug() << t.elapsed() << "ms";

但我读到它不可靠。一些替代品?

抱歉,没有 C++0x

【问题讨论】:

  • 之前有人问过这个问题:stackoverflow.com/questions/244646/qt-fast-way-to-measure-time 但是,接受且投票最多的答案是错误的。 Qt 没有提供获取 CPU 处理时间的方法。你可以试试&lt;ctime&gt;,但通常不是那么准确。请参阅我对该问题的回答:stackoverflow.com/a/13003327/856199
  • 您需要什么样的精度(即您要测量的东西大约持续多长时间)? (“不可靠”听起来很奇怪。可能不够准确,但这是另一个问题。)
  • @Mat 这里的主要问题是 QTime 不测量代码消耗的 CPU 时间。即使您的代码根本没有运行,它也会测量实际的实时时间。
  • @NikosC.:OP 想要 CPU 时间而不是挂钟,这是问题中缺少的一个相当大的信息。
  • 什么是最常用的menchmarking? cpu时间?

标签: c++ performance qt


【解决方案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(),但智能感知并没有弹出这些,只有静态成员。不过,它们确实有效。它似乎发生在定义文件中,而不是标题中。
猜你喜欢
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
  • 2013-10-21
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多