跳到正文
Yayin Story Studio Yayin Story Studio 项目文档

Visindigo::Utility::BenchmarkTimer Class

class Visindigo::Utility::BenchmarkTimer

一个用于测量代码执行时间的计时器类,支持自动记录日志、暂停和恢复计时等功能. 详情...

头文件: #include <BenchmarkTimer>
自以下版本: Visindigo 0.16.0

公开成员函数

(自 Visindigo 0.16.0 引入) BenchmarkTimer(bool autoStart = true, const QString &name = "BenchmarkTimer", bool autoLog = true)
(自 Visindigo 0.16.0 引入) ~BenchmarkTimer()
(自 Visindigo 0.16.0 引入) double counter()
(自 Visindigo 0.16.0 引入) double elapsed()
(自 Visindigo 0.16.0 引入) qint32 getLogCount() const
(自 Visindigo 0.16.0 引入) bool isPaused() const
(自 Visindigo 0.16.0 引入) bool isRunning() const
(自 Visindigo 0.16.0 引入) double pause()
(自 Visindigo 0.16.0 引入) double restart()
(自 Visindigo 0.16.0 引入) double resume()
(自 Visindigo 0.16.0 引入) void setLogCount(qint32 count)
(自 Visindigo 0.16.0 引入) void start()
(自 Visindigo 0.16.0 引入) double stop()
(自 Visindigo 0.16.0 引入) double totalPaused()

详细说明

BenchmarkTimer是一个实用的计时器类,设计用于测量代码块的执行时间。 它提供了多种功能,包括自动记录日志、暂停和恢复计时、以及在达到指定计数时自动记录日志等。

由于这个类在默认情况下自动记录日志,且在创建与销毁时自动开始与停止,因此它对于那些 需要衡量代码执行时间且衡量区域恰好是一组代码块的情况非常方便,譬如你可以直接在函数的最开始 新建一个BenchmarkTimer对象,然后什么都不用做,到函数结束时它会自动记录整个函数的执行时间。

此外,这类也为循环体中测量每次迭代的执行时间提供了便利的counter()方法, 配合setLogCount()方法可以在每隔一定次数迭代时自动记录日志。

它也支持暂停和恢复计时语义,并且可以统计总的暂停时间。理论上,使用总的暂停时间加上总的 流逝时间可以得到不受暂停影响的纯执行时间。

成员函数文档

[since Visindigo 0.16.0] BenchmarkTimer::BenchmarkTimer(bool autoStart = true, const QString &name = "BenchmarkTimer", bool autoLog = true)

autoStart 是否在创建对象时自动开始计时。 name 用于日志记录的名称,默认为 "BenchmarkTimer"。 autoLog 是否在计时器开始、停止、暂停和恢复时自动记录日志。

构造函数,创建一个BenchmarkTimer对象。

这个function 从 Visindigo 0.16.0 开始支持。

[noexcept, since Visindigo 0.16.0] BenchmarkTimer::~BenchmarkTimer()

析构函数,销毁BenchmarkTimer对象。

如果计时器正在运行,则在销毁前自动执行stop()。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] double BenchmarkTimer::counter()

调用这个函数以增加一次计数。当计数达到预设的日志记录阈值时,BenchmarkTimer会自动记录一次日志,显示当前的流逝时间。

return 从开始到现在的流逝时间(以毫秒为单位)。如果计时器没有在运行,则返回0.0。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] double BenchmarkTimer::elapsed()

return 从开始到现在的流逝时间(以毫秒为单位)。如果计时器正在运行,则返回一个实时的已流逝时间; 如果计时器没有在运行,则返回上一次在运行时的最终流逝时间。

如果定时器从未被启动过,这个函数理应返回0

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] qint32 BenchmarkTimer::getLogCount() const

return 当前的自动日志记录计数阈值。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] bool BenchmarkTimer::isPaused() const

return 如果计时器处于暂停状态,则返回true;否则返回false。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] bool BenchmarkTimer::isRunning() const

return 如果计时器正在运行,则返回true;否则返回false。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] double BenchmarkTimer::pause()

暂停计时器。如果计时器正在运行且没有处于暂停状态,则会记录当前的暂停时间,并将计时器状态设置为暂停。

return 从开始到现在的流逝时间(以毫秒为单位)。如果计时器没有在运行,或者已经处于暂停状态,则返回0.0。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] double BenchmarkTimer::restart()

重启计时器。如果计时器正在运行,则先停止计时器,然后重新开始计时。如果计时器没有在运行,则直接开始计时。

return 从开始到现在的流逝时间(以毫秒为单位)。如果计时器没有在运行,则返回0.0。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] double BenchmarkTimer::resume()

恢复计时器。如果计时器正在运行且处于暂停状态,则会计算从上次暂停到现在的时间,并将其添加到总的暂停时间中,然后将计时器状态设置为非暂停。

return 从开始到现在的流逝时间(以毫秒为单位)。如果计时器没有在运行,或者没有处于暂停状态,则返回0.0。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] void BenchmarkTimer::setLogCount(qint32 count)

count 每隔多少次调用counter()方法时自动记录一次日志。

设置自动记录日志的计数阈值。当调用counter()方法的次数达到这个阈值时,BenchmarkTimer会自动记录一次日志,显示当前的流逝时间。 内部默认为1,即每次调用counter()都会记录日志。你可以将其设置为更大的值以减少日志记录的频率,或者设置为0以禁用自动日志记录。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] void BenchmarkTimer::start()

启动计时器。如果计时器已经在运行,则此函数不会有任何效果。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] double BenchmarkTimer::stop()

停止计时器并返回从开始到现在的流逝时间(以毫秒为单位)。如果计时器没有在运行,则返回0.0。

如果要访问总的暂停时间,可以调用totalPaused()方法。

如果在停止之前,计时器处于暂停状态,则会先恢复计时器,并立即停止。这可能会产生几纳秒的误差,但通常可以忽略不计。

这个function 从 Visindigo 0.16.0 开始支持。

[since Visindigo 0.16.0] double BenchmarkTimer::totalPaused()

return 从开始到现在的总暂停时间(以毫秒为单位)。如果计时器没有在运行, 则返回上一次在运行时的总暂停时间。如果计时器从未被启动过,这个函数理应返回0。

注意,这个函数返回的总暂停时间不反应当前正在进行的暂停,因为当前的暂停时间还没有被添加到totalPausedTime中。 要获取当前的暂停时间,你需要在调用这个函数之前先调用resume()方法恢复计时器运行。如有需要,可以稍后再 重新调用pause()方法以恢复暂停状态。

这个function 从 Visindigo 0.16.0 开始支持。