- class QDeadlineTimer#
QDeadlineTimer
类用于标记未来的时间截。...概述#
方法#
def
__init__()
def
deadline()
def
deadlineNSecs()
def
hasExpired()
def
isForever()
def
__ne__()
def
__add__()
def
__iadd__()
def
__sub__()
def
__isub__()
def
__lt__()
def
__le__()
def
__eq__()
def
__gt__()
def
__ge__()
def
remainingTime()
def
setDeadline()
def
setTimerType()
def
swap()
def
timerType()
静态函数#
def
addNSecs()
def
current()
注意:
本文档可能包含自动从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::duration
和std::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])#
- 参数:
arg__1 –
ForeverConstant
type –
TimerType
使用
ForeverConstant
创建的QDeadlineTimer
对象永远不会过期。对于此类对象,remainingTime()
将返回-1,deadline()
将返回最大值,而isForever()
将返回true。计时器类型
timerType
可以忽略,因为计时器永远不会过期。- __init__(type_)
- 参数:
type –
TimerType
- __init__(msecs[, type=Qt.CoarseTimer])
- 参数:
msecs – int
type –
TimerType
创建一个
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)#
- 参数:
dt –
QDeadlineTimer
nsecs – int
- 返回类型:
返回一个
QDeadlineTimer
对象,其截止时间从dt
的截止时间延长了nsecs
纳秒。如果dt
被设置为永远不会过期,则此函数返回一个不可过期的QDeadlineTimer
。注意:
如果
dt
被创建为已过期,则其截止时间是未确定的,添加一段时间可能会也可能不会使其变为未过期。- 静态current([timerType=Qt.CoarseTimer])
- 参数:
timerType –
TimerType
- 返回类型:
返回一个已过期的但保证包含当前时间的
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()
将返回过去的时间点。使用
QDeadlineTimer
的ForeverConstant
创建的对象永远不会过期,此函数对这些对象始终返回 false。另请参阅
QDeadlineTimer
objects created with theForeverConstant
never expire and this function always returns false for them.- isForever()#
- 返回类型:
bool
返回一个指示此
QDeadlineTimer
对象永远不会超时的布尔值,否则返回 false。对于永不超时的计时器,remainingTime()
始终返回 -1,而deadline()
返回最大值。- __ne__(d2)#
- 参数:
d2 –
QDeadlineTimer
- 返回类型:
bool
警告:
本节包含自动从C++翻译到Python的代码段,可能包含错误。
如果
d1
上的截止时间和d2
中的截止时间不同,则返回 true,否则返回 false。在创建两个截止时间时使用的计时器类型被忽略。此函数等效于return d1.deadlineNSecs() != d2.deadlineNSecs()
注意:
不支持比较具有不同计时器类型的
QDeadlineTimer
对象,这可能导致不可预测的行为。- __add__(msecs)#
- 参数:
msecs – int
- 返回类型:
返回一个
QDeadlineTimer
对象,其截止时间比存储在dt
中的截止时间晚msecs
毫秒。如果dt
设置为永不超时,则此函数返回一个不会超时的QDeadlineTimer
。要添加大于 1 毫秒的精度的时间,请使用
addNSecs()
。- __iadd__(msecs)#
- 参数:
msecs – int
- 返回类型:
通过
msecs
毫秒扩展此QDeadlineTimer
对象,并返回自身。如果此对象设置为永不超时,则此函数不做任何事情。要添加大于 1 毫秒的精度的时间,请使用
addNSecs()
。- __sub__(dt2)#
- 参数:
dt2 –
QDeadlineTimer
- 返回类型:
int
- __sub__(msecs)
- 参数:
msecs – int
- 返回类型:
返回一个
QDeadlineTimer
对象,其截止时间为存储在dt
中的截止时间前的msecs
毫秒。如果dt
设置为永不失效,则此函数返回一个永远不会过期的QDeadlineTimer
对象。要减去大于1毫秒精度的时差,请使用
addNSecs()
。- __isub__(msecs)#
- 参数:
msecs – int
- 返回类型:
将此
QDeadlineTimer
对象缩短msecs
毫秒,并返回自身。如果此对象设置为永不失效,则此函数不执行任何操作。要减去大于1毫秒精度的时差,请使用
addNSecs()
。- __lt__(d2)#
- 参数:
d2 –
QDeadlineTimer
- 返回类型:
bool
警告:
本节包含自动从C++翻译到Python的代码段,可能包含错误。
如果代码
d1
的截止时间早于代码d2
中的截止时间,则返回true,否则返回false。用于创建两个截止时间的计时器类型被忽略。此函数等同于return d1.deadlineNSecs() < d2.deadlineNSecs()
注意:
不支持比较具有不同计时器类型的
QDeadlineTimer
对象,这可能导致不可预测的行为。- __le__(d2)#
- 参数:
d2 –
QDeadlineTimer
- 返回类型:
bool
警告:
本节包含自动从C++翻译到Python的代码段,可能包含错误。
如果代码
d1
的截止时间早于或等于代码d2
中的截止时间,则返回true,否则返回false。创建两个截止时间的计时器类型被忽略。此函数等同于return d1.deadlineNSecs() <= d2.deadlineNSecs()
注意:
不支持比较具有不同计时器类型的
QDeadlineTimer
对象,这可能导致不可预测的行为。- __eq__(d2)#
- 参数:
d2 –
QDeadlineTimer
- 返回类型:
bool
警告:
本节包含自动从C++翻译到Python的代码段,可能包含错误。
如果代码
d1
和代码d2
中的截止时间相同,则返回true,否则返回false。创建两个截止时间的计时器类型被忽略。此函数等同于return d1.deadlineNSecs() == d2.deadlineNSecs()
注意:
不支持比较具有不同计时器类型的
QDeadlineTimer
对象,这可能导致不可预测的行为。- __gt__(d2)#
- 参数:
d2 –
QDeadlineTimer
- 返回类型:
bool
警告:
本节包含自动从C++翻译到Python的代码段,可能包含错误。
如果代码
d1
的截止时间晚于代码d2
中的截止时间,则返回true,否则返回false。创建两个截止时间的计时器类型被忽略。此函数等同于return d1.deadlineNSecs() > d2.deadlineNSecs()
注意:
不支持比较具有不同计时器类型的
QDeadlineTimer
对象,这可能导致不可预测的行为。- __ge__(d2)#
- 参数:
d2 –
QDeadlineTimer
- 返回类型:
bool
警告:
本节包含自动从C++翻译到Python的代码段,可能包含错误。
如果代码
d1
的截止时间晚于或等于代码d2
中的截止时间,则返回true,否则返回false。创建两个截止时间的计时器类型被忽略。此函数等同于return d1.deadlineNSecs() >= d2.deadlineNSecs()
注意:
不支持比较具有不同计时器类型的
QDeadlineTimer
对象,这可能导致不可预测的行为。- remainingTime()#
- 返回类型:
int
警告:
本节包含自动从C++翻译到Python的代码段,可能包含错误。
返回当前
QDeadlineTimer
对象中剩余的时间(以毫秒为单位)。如果计时器已经过期,此函数将返回零,并且无法通过此函数获取超出时间(为此,请参见deadline()
)。如果计时器设置为永远不过期,此函数返回-1。此函数适用于使用毫秒超时的 Qt API,例如许多
QIODevice
waitFor
函数,或在QMutex
、QWaitCondition
、QSemaphore
或QReadWriteLock
中的定时锁定函数中。例如mutex.tryLock(deadline.remainingTime())
- remainingTimeNSecs()#
- 返回类型:
int
返回当前
QDeadlineTimer
对象中剩余的时间(以纳秒为单位)。如果计时器已经过期,此函数将返回零,并且无法通过此函数获取超出时间。如果计时器设置为永远不过期,此函数返回-1。- setDeadline(msecs[, timerType=Qt.CoarseTimer])#
- 参数:
msecs – int
timerType –
TimerType
设置此
QDeadlineTimer
对象的截止日期为从参考时钟(与msecsSinceReference()
相同)起计算的msecs
绝对时间点(以毫秒为单位),并将计时器类型设置为timerType
。如果值在过去的时刻,此QDeadlineTimer
将被标记为已过期。如果
msecs
是std::numeric_limits<qint64>::max()
或截止日期超过了可表示的未来点,则此QDeadlineTimer
将被设置为永不过期。- setPreciseDeadline(secs[, nsecs=0[, type=Qt.CoarseTimer]])#
- 参数:
secs – int
nsecs – int
type –
TimerType
将此
QDeadlineTimer
对象的截止日期设置为从参考时钟原点起的secs
秒和nsecs
纳秒,计时器类型设置为timerType
。如果值在过去的时刻,此QDeadlineTimer
将被标记为已过期。如果
secs
或nsecs
为std::numeric_limits<qint64>::max()
,则此QDeadlineTimer
将被设置为永不过期。如果nsecs
超过 10 亿纳秒(1 秒),则相应的将调整secs
。- setPreciseRemainingTime(secs[, nsecs=0[, type=Qt.CoarseTimer]])#
- 参数:
secs – int
nsecs – int
type –
TimerType
将此
QDeadlineTimer
对象的剩余时间设置为从现在起的secs
秒加上nsecs
纳秒,如果secs
为正值。如果secs
为负值,则此QDeadlineTimer
将被设置为永不失效(此行为不适用于nsecs
)。如果两个参数都为零,此QDeadlineTimer
将被标记为已过期。为了优化目的,如果
secs
和nsecs
都为零,此函数可能会跳过获取当前时间,而是使用已知在过去的一个值。如果发生这种情况,deadline()
可能会返回一个意外的值,并且此对象不能用于计算超时的时长。如果需要此功能,请使用current()
并将其与之相加。此
QDeadlineTimer
对象的计时器类型将设置为指定的timerType
。注意:
在 Qt 6.6 之前,唯一导致计时器永不失效的条件是当
secs
为 -1 时。将此
QDeadlineTimer
对象的剩余时间设置为从现在起的msecs
毫秒,如果msecs
为正值。如果msecs
为零,则此QDeadlineTimer
对象将被标记为已过期,而负值将使它永不过期。出于优化的目的,如果
msecs
为零,此函数可能会跳过获取当前时间,而可能使用一个已知在过去的时间值。如果发生这种情况,deadline()
可能会返回一个意外的值,并且此对象不能用于计算超时时间。如果需要该功能,请使用current()
并将其添加到时间。此
QDeadlineTimer
对象的计时器类型将设置为指定的timerType
。注意:
在 Qt 6.6 之前,只有 -1 的值会导致计时器永不会过期。
更改此对象的定时器类型为
timerType
。不同的
timerType
值的行为取决于操作系统。使用PreciseTimer
将使用Qt能找到的最精确的定时器,分辨率为1毫秒或更好,而QDeadlineTimer
将尝试使用更粗糙的定时器来处理CoarseTimer
和VeryCoarseTimer
。另请参阅
- swap(other)#
- 参数:
other –
QDeadlineTimer
交换此截止定时器与另一个定时机次。
返回此对象的当前活动定时器类型。
另请参阅