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() )。

计时器类型#

QTimer 类似,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)
class ForeverConstant#

常量

描述

QDeadlineTimer.ForeverConstant.Forever

在创建QDeadlineTimer时使用,表示截止日期不应过期

PySide6.QtCore.QDeadlineTimer.Forever#
__init__(arg__1[, type_=Qt.CoarseTimer])#
参数:

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

计时器类型timerType可以忽略,因为计时器永远不会过期。

__init__(type_)
参数:

typeTimerType

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

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

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

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

注意:

在 Qt 6.6 之前,只有 -1 的值会导致计时器永不会过期。

__init__()
static addNSecs(dt, nsecs)#
参数:
返回类型:

QDeadlineTimer

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

注意:

如果dt被创建为已过期,则其截止时间是未确定的,添加一段时间可能会也可能不会使其变为未过期。

静态current([timerType=Qt.CoarseTimer])
参数:

timerTypeTimerType

返回类型:

QDeadlineTimer

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

构造的QDeadlineTimer对象将包含指定的timerType

deadline()
返回类型:

int

警告:

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

返回存储在QDeadlineTimer对象中的截止时间的绝对时间点,相对于参考时钟计算,以毫秒为单位,与msecsSinceReference()相同。如果这个QDeadlineTimer已经过期,其值将是在过去。

如果这个QDeadlineTimer永远不会过期,此函数返回std::numeric_limits<qint64>::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()#
返回类型:

int

警告:

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

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

如果此 QDeadlineTimer 永远不会过期或直到截止时间的纳秒数无法适配返回类型,该函数返回 std::numeric_limits<qint64>::max()

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

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

注意:

以过期方式创建的计时器的截止时间在过去的某个不确定的时间点,所以上面的计算可能不适用。

hasExpired()#
返回类型:

bool

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

使用 QDeadlineTimerForeverConstant 创建的对象永远不会过期,此函数对这些对象始终返回 false。

另请参阅

QDeadlineTimer objects created with the ForeverConstant never expire and this function always returns false for them.

isForever()#
返回类型:

bool

返回一个指示此 QDeadlineTimer 对象永远不会超时的布尔值,否则返回 false。对于永不超时的计时器,remainingTime() 始终返回 -1,而 deadline() 返回最大值。

__ne__(d2)#
参数:

d2QDeadlineTimer

返回类型:

bool

警告:

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

如果 d1 上的截止时间和 d2 中的截止时间不同,则返回 true,否则返回 false。在创建两个截止时间时使用的计时器类型被忽略。此函数等效于

return d1.deadlineNSecs() != d2.deadlineNSecs()

注意:

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

__add__(msecs)#
参数:

msecs – int

返回类型:

QDeadlineTimer

返回一个 QDeadlineTimer 对象,其截止时间比存储在 dt 中的截止时间晚 msecs 毫秒。如果 dt 设置为永不超时,则此函数返回一个不会超时的 QDeadlineTimer

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

__iadd__(msecs)#
参数:

msecs – int

返回类型:

QDeadlineTimer

通过 msecs 毫秒扩展此 QDeadlineTimer 对象,并返回自身。如果此对象设置为永不超时,则此函数不做任何事情。

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

__sub__(dt2)#
参数:

dt2QDeadlineTimer

返回类型:

int

__sub__(msecs)
参数:

msecs – int

返回类型:

QDeadlineTimer

返回一个QDeadlineTimer对象,其截止时间为存储在dt中的截止时间前的msecs毫秒。如果dt设置为永不失效,则此函数返回一个永远不会过期的QDeadlineTimer对象。

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

__isub__(msecs)#
参数:

msecs – int

返回类型:

QDeadlineTimer

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

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

__lt__(d2)#
参数:

d2QDeadlineTimer

返回类型:

bool

警告:

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

如果代码d1的截止时间早于代码d2中的截止时间,则返回true,否则返回false。用于创建两个截止时间的计时器类型被忽略。此函数等同于

return d1.deadlineNSecs() < d2.deadlineNSecs()

注意:

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

__le__(d2)#
参数:

d2QDeadlineTimer

返回类型:

bool

警告:

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

如果代码d1的截止时间早于或等于代码d2中的截止时间,则返回true,否则返回false。创建两个截止时间的计时器类型被忽略。此函数等同于

return d1.deadlineNSecs() <= d2.deadlineNSecs()

注意:

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

__eq__(d2)#
参数:

d2QDeadlineTimer

返回类型:

bool

警告:

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

如果代码d1和代码d2中的截止时间相同,则返回true,否则返回false。创建两个截止时间的计时器类型被忽略。此函数等同于

return d1.deadlineNSecs() == d2.deadlineNSecs()

注意:

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

__gt__(d2)#
参数:

d2QDeadlineTimer

返回类型:

bool

警告:

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

如果代码d1的截止时间晚于代码d2中的截止时间,则返回true,否则返回false。创建两个截止时间的计时器类型被忽略。此函数等同于

return d1.deadlineNSecs() > d2.deadlineNSecs()

注意:

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

__ge__(d2)#
参数:

d2QDeadlineTimer

返回类型:

bool

警告:

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

如果代码d1的截止时间晚于或等于代码d2中的截止时间,则返回true,否则返回false。创建两个截止时间的计时器类型被忽略。此函数等同于

return d1.deadlineNSecs() >= d2.deadlineNSecs()

注意:

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

remainingTime()#
返回类型:

int

警告:

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

返回当前 QDeadlineTimer 对象中剩余的时间(以毫秒为单位)。如果计时器已经过期,此函数将返回零,并且无法通过此函数获取超出时间(为此,请参见 deadline())。如果计时器设置为永远不过期,此函数返回-1。

此函数适用于使用毫秒超时的 Qt API,例如许多 QIODevice waitFor 函数,或在 QMutexQWaitConditionQSemaphoreQReadWriteLock 中的定时锁定函数中。例如

mutex.tryLock(deadline.remainingTime())
remainingTimeNSecs()#
返回类型:

int

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

setDeadline(msecs[, timerType=Qt.CoarseTimer])#
参数:
  • msecs – int

  • timerTypeTimerType

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

如果 msecsstd::numeric_limits<qint64>::max() 或截止日期超过了可表示的未来点,则此 QDeadlineTimer 将被设置为永不过期。

setPreciseDeadline(secs[, nsecs=0[, type=Qt.CoarseTimer]])#
参数:
  • secs – int

  • nsecs – int

  • typeTimerType

将此 QDeadlineTimer 对象的截止日期设置为从参考时钟原点起的 secs 秒和 nsecs 纳秒,计时器类型设置为 timerType。如果值在过去的时刻,此 QDeadlineTimer 将被标记为已过期。

如果 secsnsecsstd::numeric_limits<qint64>::max(),则此 QDeadlineTimer 将被设置为永不过期。如果 nsecs 超过 10 亿纳秒(1 秒),则相应的将调整 secs

setPreciseRemainingTime(secs[, nsecs=0[, type=Qt.CoarseTimer]])#
参数:
  • secs – int

  • nsecs – int

  • typeTimerType

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

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

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

注意:

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

setRemainingTime(msecs[, type=Qt.CoarseTimer])#
参数:

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

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

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

注意:

在 Qt 6.6 之前,只有 -1 的值会导致计时器永不会过期。

setTimerType(type)#
参数:

typeTimerType

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

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

另请参阅

timerType() TimerType

swap(other)#
参数:

otherQDeadlineTimer

交换此截止定时器与另一个定时机次。

timerType()#
返回类型:

TimerType

返回此对象的当前活动定时器类型。

另请参阅

setTimerType()