PySide6.QtCore.QDeadlineTimer

class QDeadlineTimer

QDeadlineTimer 类标记未来的截止时间。更多

概要

方法

静态函数

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QDeadlineTimer 类通常用于计算未来的截止时间并验证截止时间是否已过期。QDeadlineTimer 也可以用于没有过期时间的截止时间(“永远”)。它与 QElapsedTimer 形成对比,后者计算自调用 start() 以来已经过去的时间。

QDeadlineTimer 提供了比 hasExpired() 更方便的 API。

该类的典型用例是在相关操作开始之前创建一个QDeadlineTimer,然后使用remainingTime()hasExpired()来确定是否继续尝试该操作。QDeadlineTimer对象可以传递给执行此操作的函数,以便它们知道还需要操作多长时间。

def executeOperation(msecs):

    deadline = QDeadlineTimer(msecs)
    do {
        if readFromDevice(deadline.remainingTime()):
            break
        waitForReadyRead(deadline)
    } while (not deadline.hasExpired())

许多QDeadlineTimer函数处理超时值,这些值都以毫秒为单位。有两个特殊值,与许多其他名为waitFor或类似的Qt函数相同:

  • 0: 没有剩余时间,已过期

  • -1: 剩余时间无限,计时器永不过期

参考时钟

QDeadlineTimer 将使用与 QElapsedTimer 相同的时钟(参见 clockType()isMonotonic())。

定时器类型

QTimerQChronoTimer类似,QDeadlineTimer可以在定时器中选择不同的精度级别。您可以通过将PreciseTimer传递给设置或更改定时器的函数来选择精确计时,或者通过将CoarseTimer传递给这些函数来选择粗略计时。VeryCoarseTimer目前被解释为与CoarseTimer相同的方式。

此功能依赖于操作系统的支持:如果操作系统不支持粗略计时器功能,则QDeadlineTimer将表现得像传递了PreciseTimer

QDeadlineTimer 默认使用 CoarseTimer,因为在支持粗略计时的操作系统上,对该时钟源进行计时调用通常效率更高。粗略程度取决于操作系统,但应该在几毫秒的范围内。

`` std::chrono``

兼容性

QDeadlineTimer 与 C++11 的 std::chrono API 兼容,并且可以从 std::chrono::durationstd::chrono::time_point 对象构造或进行比较。此外,它与 C++14 的时间字面量完全兼容,允许编写如下代码:

namespace = using()
namespace = using()
deadline = QDeadlineTimer(30s)
device.waitForReadyRead(deadline)
if deadline.remainingTime<nanoseconds>() > 300ms:
    cleanup()

如上例所示,QDeadlineTimer 提供了一个模板版本的 remainingTime()deadline(),可用于返回 std::chrono 对象。

请注意,与time_point进行比较不如与duration进行比较高效,因为QDeadlineTimer可能需要从其内部时钟源转换为time_point对象使用的时钟源。还要注意,由于这种转换,截止时间将不精确,因此以下代码预计不会相等:

namespace = using()
namespace = using()
now = steady_clock::now()
deadline = QDeadlineTimer(now + 1s)
Q_ASSERT(deadline == now + 1s)

另请参阅

QTime QChronoTimer QDeadlineTimer TimerType

class ForeverConstant

常量

描述

QDeadlineTimer.ForeverConstant.Forever

用于在创建QDeadlineTimer时指示截止时间不应过期

PySide6.QtCore.QDeadlineTimer.Forever
__init__()
__init__(type_)
Parameters:

类型TimerType

__init__(arg__1[, type_=Qt.CoarseTimer])
Parameters:

使用ForeverConstant创建的QDeadlineTimer对象永远不会过期。对于这样的对象,remainingTime()将返回-1,deadline()将返回最大值,而isForever()将返回true。

定时器类型 timerType 可能会被忽略,因为定时器永远不会过期。

__init__(msecs[, type=Qt.CoarseTimer])
Parameters:

构造一个QDeadlineTimer对象,如果msecs为正数,则从创建该对象的时刻起,设置一个msecs毫秒的到期时间。如果msecs为零,则此QDeadlineTimer将被标记为已过期,导致remainingTime()返回零,且deadline()返回过去的一个不确定时间点。如果msecs为负数,则计时器将设置为永不过期,导致remainingTime()返回-1,且deadline()返回最大值。

QDeadlineTimer 对象将使用指定的计时器 type 进行构造。

出于优化目的,如果msecs为零,此函数可能会跳过获取当前时间,而可能使用已知的过去值。如果发生这种情况,deadline()可能会返回一个意外的值,并且此对象不能用于计算其超时时间。如果需要此功能,请使用current()并添加时间。

注意

在 Qt 6.6 之前,导致计时器永不超时的唯一值是 -1。

static addNSecs(dt, nsecs)
Parameters:
Return type:

QDeadlineTimer

返回一个QDeadlineTimer对象,其截止时间从dt的截止时间延长了nsecs纳秒。如果dt被设置为永不过期,此函数将返回一个同样永不过期的QDeadlineTimer

注意

如果 dt 被创建为已过期,其截止日期是不确定的,增加一定的时间可能会导致它变为未过期,也可能不会。

static current([timerType=Qt.CoarseTimer])
Parameters:

timerTypeTimerType

Return type:

QDeadlineTimer

返回一个已过期但保证包含当前时间的QDeadlineTimer。通过此函数创建的对象可以使用deadline()函数参与计算计时器超时的时间。

QDeadlineTimer 对象将使用指定的 timerType 构造。

deadline()
Return type:

整数

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回存储在QDeadlineTimer对象中的截止日期的绝对时间点,以相对于参考时钟的毫秒数计算,与msecsSinceReference()相同。如果此QDeadlineTimer已过期,则该值将为过去的时间。

如果这个 QDeadlineTimer 永远不会过期,这个函数将返回 std::numeric_limits::max()

此函数可用于通过减去current()msecsSinceReference()来计算计时器超时的时间,如下例所示:

realTimeLeft = deadline.deadline()
if realTimeLeft != (std.numeric_limits<qint64>.max)():
    realTimeLeft -= QDeadlineTimer.current().deadline()
    # or:
    #QElapsedTimer timer
    #timer.start()
    #realTimeLeft -= timer.msecsSinceReference()

注意

已过期的计时器在过去有一个不确定的时间点作为其截止时间,因此上述计算可能不适用。

deadlineNSecs()
Return type:

整数

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回存储在QDeadlineTimer对象中的截止日期的绝对时间点,以纳秒为单位相对于参考时钟计算,与msecsSinceReference()相同。如果此QDeadlineTimer已过期,则该值将为过去的时间。

如果这个QDeadlineTimer永远不会过期,或者距离截止时间的纳秒数无法适应返回类型,此函数将返回std::numeric_limits::max()

此函数可用于通过减去current()来计算计时器超时的时间,如下例所示:

realTimeLeft = deadline.deadlineNSecs()
if realTimeLeft != std.numeric_limits<qint64>.max():
    realTimeLeft -= QDeadlineTimer.current().deadlineNSecs()

注意

已过期的计时器在过去有一个不确定的时间点作为其截止时间,因此上述计算可能不适用。

hasExpired()
Return type:

布尔

如果此QDeadlineTimer对象已过期,则返回true,如果还有剩余时间,则返回false。对于已过期的对象,remainingTime()将返回零,deadline()将返回过去的时间点。

使用ForeverConstant创建的QDeadlineTimer对象永远不会过期,因此此函数对于它们总是返回false。

isForever()
Return type:

布尔

如果此QDeadlineTimer对象永不过期,则返回true,否则返回false。对于永不过期的计时器,remainingTime()始终返回-1,而deadline()返回最大值。

__ne__(rhs)
Parameters:

rhsQDeadlineTimer

Return type:

布尔

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

如果lhs上的截止日期和rhs中的截止日期不同,则返回true,否则返回false。用于创建这两个截止日期的计时器类型将被忽略。此函数等同于:

return lhs.deadlineNSecs() != rhs.deadlineNSecs()

注意

不支持比较具有不同计时器类型的QDeadlineTimer对象,可能会导致不可预测的行为。

__add__(msecs)
Parameters:

msecs – 整数

Return type:

QDeadlineTimer

返回一个QDeadlineTimer对象,其截止时间比存储在dt中的截止时间晚msecs。如果dt设置为永不过期,此函数返回一个同样永不过期的QDeadlineTimer

要添加精度大于1毫秒的时间,请使用addNSecs()

__iadd__(msecs)
Parameters:

msecs – 整数

Return type:

QDeadlineTimer

将此QDeadlineTimer对象延长msecs毫秒并返回自身。如果此对象设置为永不过期,则此函数不执行任何操作。

要添加精度大于1毫秒的时间,请使用addNSecs()

__sub__(dt2)
Parameters:

dt2QDeadlineTimer

Return type:

整数

__sub__(msecs)
Parameters:

msecs – 整数

Return type:

QDeadlineTimer

返回一个QDeadlineTimer对象,其截止时间是存储在dt中的截止时间之前的msecs。如果dt设置为永不过期,此函数返回一个同样永不过期的QDeadlineTimer

要减去精度大于1毫秒的时间,请使用addNSecs()

__isub__(msecs)
Parameters:

msecs – 整数

Return type:

QDeadlineTimer

将此QDeadlineTimer对象缩短msecs毫秒并返回自身。如果此对象设置为永不过期,则此函数不执行任何操作。

要减去精度大于1毫秒的时间,请使用addNSecs()

__lt__(rhs)
Parameters:

rhsQDeadlineTimer

Return type:

布尔

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

如果 lhs 上的截止时间早于 rhs 中的截止时间,则返回 true,否则返回 false。用于创建这两个截止时间的计时器类型将被忽略。此函数等同于:

return lhs.deadlineNSecs() < rhs.deadlineNSecs()

注意

不支持比较具有不同计时器类型的QDeadlineTimer对象,可能会导致不可预测的行为。

__le__(rhs)
Parameters:

rhsQDeadlineTimer

Return type:

布尔

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

如果lhs上的截止时间早于或等于rhs中的截止时间,则返回true,否则返回false。用于创建这两个截止时间的计时器类型将被忽略。此函数等同于:

return lhs.deadlineNSecs() <= rhs.deadlineNSecs()

注意

不支持比较具有不同计时器类型的QDeadlineTimer对象,可能会导致不可预测的行为。

__eq__(rhs)
Parameters:

rhsQDeadlineTimer

Return type:

布尔

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

如果lhs上的截止日期和rhs中的截止日期相同,则返回true,否则返回false。用于创建这两个截止日期的计时器类型将被忽略。此函数等同于:

return lhs.deadlineNSecs() == rhs.deadlineNSecs()

注意

不支持比较具有不同计时器类型的QDeadlineTimer对象,可能会导致不可预测的行为。

__gt__(rhs)
Parameters:

rhsQDeadlineTimer

Return type:

布尔

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

如果 lhs 上的截止时间晚于 rhs 中的截止时间,则返回 true,否则返回 false。用于创建这两个截止时间的计时器类型将被忽略。此函数等同于:

return lhs.deadlineNSecs() > rhs.deadlineNSecs()

注意

不支持比较具有不同计时器类型的QDeadlineTimer对象,可能会导致不可预测的行为。

__ge__(rhs)
Parameters:

rhsQDeadlineTimer

Return type:

布尔

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

如果lhs上的截止时间晚于或等于rhs中的截止时间,则返回true,否则返回false。用于创建这两个截止时间的计时器类型被忽略。此函数等同于:

return lhs.deadlineNSecs() >= rhs.deadlineNSecs()

注意

不支持比较具有不同计时器类型的QDeadlineTimer对象,可能会导致不可预测的行为。

remainingTime()
Return type:

整数

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回此QDeadlineTimer对象中剩余的毫秒数。如果计时器已经过期,此函数将返回零,并且无法通过此函数获取超时的时间量(要执行此操作,请参阅deadline())。如果计时器设置为永不过期,此函数返回-1。

此函数适用于需要毫秒超时的Qt API,例如许多QIODevicewaitFor函数或QMutexQWaitConditionQSemaphoreQReadWriteLock中的定时锁定函数。例如:

mutex.tryLock(deadline.remainingTime())
remainingTimeNSecs()
Return type:

整数

返回此QDeadlineTimer对象中剩余的纳秒时间。如果计时器已经过期,此函数将返回零,并且无法通过此函数获取超时的时间量。如果计时器设置为永不过期,此函数返回-1。

setDeadline(msecs[, timerType=Qt.CoarseTimer])
Parameters:

设置此QDeadlineTimer对象的截止时间为msecs绝对时间点,以毫秒为单位自参考时钟(与msecsSinceReference()相同)开始计数,并将计时器类型设置为timerType。如果该值在过去,此QDeadlineTimer将被标记为已过期。

如果 msecsstd::numeric_limits::max() 或者截止时间超过了未来可表示的点,这个 QDeadlineTimer 将被设置为永不过期。

setPreciseDeadline(secs[, nsecs=0[, type=Qt.CoarseTimer]])
Parameters:
  • secs – 整数

  • nsecs – 整数

  • typeTimerType

设置此QDeadlineTimer对象的截止时间为自参考时钟纪元(与msecsSinceReference()相同)起secs秒和nsecs纳秒,并将计时器类型设置为timerType。如果该值在过去,此QDeadlineTimer将被标记为已过期。

如果 secsnsecsstd::numeric_limits::max(),这个 QDeadlineTimer 将被设置为永不过期。如果 nsecs 超过 10 亿纳秒(1 秒),那么 secs 将相应调整。

setPreciseRemainingTime(secs[, nsecs=0[, type=Qt.CoarseTimer]])
Parameters:
  • secs – 整数

  • nsecs – 整数

  • typeTimerType

设置此QDeadlineTimer对象的剩余时间为从现在开始的secs秒加上nsecs纳秒,如果secs的值为正。如果secs为负,此QDeadlineTimer将被设置为永不过期(此行为不适用于nsecs)。如果两个参数都为零,此QDeadlineTimer将被标记为已过期。

出于优化目的,如果secsnsecs都为零,此函数可能会跳过获取当前时间,而使用已知的过去值。如果发生这种情况,deadline()可能会返回一个意外的值,并且此对象不能用于计算其超时时间。如果需要此功能,请使用current()并添加时间。

QDeadlineTimer对象的计时器类型将被设置为指定的timerType

注意

在 Qt 6.6 之前,导致计时器永不超时的唯一条件是当 secs 为 -1 时。

setRemainingTime(msecs[, type=Qt.CoarseTimer])
Parameters:

如果msecs的值为正数,则将这个QDeadlineTimer对象的剩余时间设置为从现在开始的msecs毫秒。如果msecs为零,则此QDeadlineTimer对象将被标记为已过期,而负值将使其设置为永不过期。

出于优化目的,如果msecs为零,此函数可能会跳过获取当前时间,而可能使用已知的过去值。如果发生这种情况,deadline()可能会返回一个意外的值,并且此对象不能用于计算其超时时间。如果需要此功能,请使用current()并添加时间。

QDeadlineTimer对象的计时器类型将被设置为指定的timerType

注意

在 Qt 6.6 之前,导致计时器永不超时的唯一值是 -1。

setTimerType(type)
Parameters:

类型TimerType

将此对象的计时器类型更改为 timerType

timerType 的每个可能值的行为取决于操作系统。PreciseTimer 将使用 Qt 能找到的最精确的计时器,分辨率为 1 毫秒或更好,而 QDeadlineTimer 将尝试为 CoarseTimerVeryCoarseTimer 使用更粗糙的计时器。

另请参阅

timerType() TimerType

swap(other)
Parameters:

其他QDeadlineTimer

将此截止时间计时器与other截止时间计时器交换。

timerType()
Return type:

TimerType

返回此对象的计时器类型是否处于活动状态。

另请参阅

setTimerType()