当前位置: 首页 > news >正文

西安建设教育网站购物帮 做特惠的导购网站

西安建设教育网站,购物帮 做特惠的导购网站,外包seo公司,公司网站建设技术的发展目录 QTimer QTimer 的替代方案 API QElapsedTimer API 笔者写Qt的时候经常遇到需要定时完成任务的情况。举个例子#xff1a;我写串口通信程序的时候需要定时向下位机发送数据。或者是定时任务周期性出发#xff08;更新时间等#xff09; 在Qt中#xff0c;有两个非…目录 QTimer QTimer 的替代方案 API QElapsedTimer API 笔者写Qt的时候经常遇到需要定时完成任务的情况。举个例子我写串口通信程序的时候需要定时向下位机发送数据。或者是定时任务周期性出发更新时间等 在Qt中有两个非常常用的类来完成定时操作请看 QTimer QTimer 类提供了一个高级的定时器编程接口。使用时创建一个 QTimer将其 timeout() 信号连接到相应的槽并调用 start()。之后它将在固定的时间间隔内发射 timeout() 信号。以下是一个一秒1000 毫秒定时器的示例来自模拟钟表示例 QTimer *timer new QTimer(this); connect(timer, QTimer::timeout, this, QOverload::of(AnalogClock::update)); timer-start(1000); 从那时起update() 槽每秒会被调用一次。你可以通过调用 setSingleShot(true) 将定时器设置为只触发一次。你还可以使用静态的 QTimer::singleShot() 函数在指定的时间间隔后调用一个槽 QTimer::singleShot(200, this, Foo::updateCaption); 在多线程应用程序中你可以在任何具有事件循环的线程中使用 QTimer。要从非 GUI 线程启动事件循环使用 QThread::exec()。Qt 使用定时器的线程亲和性来确定哪个线程将发射 timeout() 信号。因此必须在其线程中启动和停止定时器不能从其他线程启动定时器。 在特殊情况下超时时间为 0 的 QTimer 将尽快超时但零定时器与其他事件源之间的顺序是未指定的。零定时器可以用于在保持用户界面响应的同时执行一些工作 QTimer *timer new QTimer(this); connect(timer, QTimer::timeout, this, Foo::processOneThing); timer-start(); 从那时起processOneThing() 将被重复调用。它应编写为总是快速返回通常在处理一条数据项后以便 Qt 能够向用户界面传递事件并在完成所有工作后尽快停止定时器。这是实现 GUI 应用程序中重型工作的传统方法但随着多线程在越来越多的平台上的可用性增加我们预期零毫秒的 QTimer 对象将逐渐被 QThread 取代。 定时器的精度取决于底层操作系统和硬件。大多数平台支持 1 毫秒的分辨率尽管在许多实际情况下定时器的精度可能无法达到这一分辨率。精度也取决于定时器类型。对于 Qt::PreciseTimerQTimer 将尽力保持 1 毫秒的精度。精确定时器也不会提前超时。 对于 Qt::CoarseTimer 和 Qt::VeryCoarseTimer 类型QTimer 可能会在预期之前提前唤醒具体提前的时间范围为这些类型的边界对于 Qt::CoarseTimer 为间隔的 5%对于 Qt::VeryCoarseTimer 为 500 毫秒。 所有定时器类型可能会因系统繁忙或无法提供请求的精度而延迟超时。在超时过载的情况下即使多个超时已经到达Qt 只会发射一次 timeout()然后恢复原始的时间间隔。 QTimer 的替代方案 Qt 6.8 引入了 QChronoTimer。这两个类之间的主要区别在于QChronoTimer 支持更大的时间间隔范围和更高的精度std::chrono::nanoseconds。对于 QTimer最大支持的间隔为 ±24 天而对于 QChronoTimer 为 ±292 年对大于 std::numeric_limitsint::max() 的时间间隔减少了整数溢出的可能性。如果你只需要毫秒级的分辨率和 ±24 天的范围可以继续使用 QTimer。 另一个替代方案是在你的类中重新实现 QObject::timerEvent() 方法该类必须是 QObject 的子类并使用以下方法之一 使用 QBasicTimer这是一个轻量级的值类封装了定时器 ID。你可以使用 QBasicTimer::start() 启动定时器并用 QBasicTimer::stop() 停止它。你可以在重新实现的 timerEvent() 中处理事件。 更低级的方法是直接操作定时器 ID。启动定时器时调用 QObject::startTimer()存储返回的 ID。停止定时器时调用 QObject::killTimer()。你可以在重新实现的 timerEvent() 中处理事件。这种方法通常比使用 QBasicTimer 更麻烦。 使用 timerEvent() 的一个缺点是一些高级功能如单次触发定时器和信号不受支持。 API 成员/信号/槽类型说明QTimer(QObject *parent nullptr)构造函数创建一个定时器对象可以选择设置父对象。virtual ~QTimer()析构函数销毁定时器对象。QBindablebool bindableActive()成员返回一个可绑定的布尔值指示定时器是否处于活动状态。QBindableint bindableInterval()成员返回一个可绑定的整型值表示定时器的时间间隔。QBindablebool bindableSingleShot()成员返回一个可绑定的布尔值指示定时器是否为单次触发模式。QBindableQt::TimerType bindableTimerType()成员返回一个可绑定的枚举值表示定时器的类型。QMetaObject::Connection callOnTimeout(Functor slot)成员连接指定的槽函数到 timeout() 信号当定时器超时时调用。QMetaObject::Connection callOnTimeout(const QObject *context, Functor slot, Qt::ConnectionType connectionType Qt::AutoConnection)成员在指定上下文中连接槽函数到 timeout() 信号。Qt::TimerId id() const (since 6.8)成员返回定时器的 ID用于唯一标识定时器。int interval() const成员返回定时器的时间间隔毫秒。std::chrono::milliseconds intervalAsDuration() const成员返回以 std::chrono::milliseconds 表示的时间间隔。bool isActive() const成员判断定时器是否处于活动状态。bool isSingleShot() const成员判断定时器是否为单次触发模式。int remainingTime() const成员返回定时器下次超时之前剩余的时间毫秒。std::chrono::milliseconds remainingTimeAsDuration() const成员返回以 std::chrono::milliseconds 表示的剩余时间。void setInterval(int msec)成员设置定时器的时间间隔毫秒。void setInterval(std::chrono::milliseconds value)成员设置定时器的时间间隔以 std::chrono::milliseconds 表示。void setSingleShot(bool singleShot)成员设置定时器为单次触发或循环触发模式。void setTimerType(Qt::TimerType atype)成员设置定时器的类型。void start(std::chrono::milliseconds msec)成员启动定时器设置时间间隔。int timerId() const成员返回定时器的 ID。Qt::TimerType timerType() const成员返回定时器的类型。void start(int msec)公共槽启动定时器并设置时间间隔毫秒。void start()公共槽启动定时器使用之前设置的时间间隔。void stop()公共槽停止定时器。void timeout()信号当定时器超时时发射的信号。void singleShot(Duration interval, Functor functor)静态成员设置一个单次触发的定时器在指定时间后调用给定的函数。void singleShot(Duration interval, Qt::TimerType timerType, Functor functor)静态成员设置单次触发定时器并指定定时器类型。void singleShot(Duration interval, const QObject *context, Functor functor)静态成员在指定上下文中设置单次触发定时器。void singleShot(Duration interval, Qt::TimerType timerType, const QObject *context, Functor functor)静态成员在指定上下文中设置单次触发定时器并指定类型。void singleShot(std::chrono::nanoseconds nsec, const QObject *receiver, const char *member)静态成员在指定纳秒数后调用接收者的成员函数。void singleShot(std::chrono::nanoseconds nsec, Qt::TimerType timerType, const QObject *receiver, const char *member)静态成员在指定纳秒数后调用接收者的成员 QElapsedTimer 这个玩意是用来实现计时操作的通常用于快速计算两个事件之间经过的时间。它的 API 与 QTime 类似因此可以快速将使用 QTime 的代码迁移到这个新类。然而与 QTime 不同QElapsedTimer 尽可能使用单调时钟。这意味着无法将 QElapsedTimer 对象转换为人类可读的时间。该类的典型用例是确定在某个缓慢操作中花费了多少时间。最简单的示例是用于调试目的如下所示 QElapsedTimer timer; timer.start(); slowOperation1(); qDebug() The slow operation took timer.elapsed() milliseconds; 在这个示例中通过调用 start() 启动计时器经过的时间通过 elapsed() 函数计算。经过的时间还可以用来重新计算另一项操作可用的时间这在执行必须在特定时间内完成的多步操作时非常有用。例如QIODevice 及其子类中的 waitFor 类型函数就是这种需求的良好示例。在这种情况下代码可以如下 void executeSlowOperations(int timeout) {QElapsedTimer timer;timer.start();slowOperation1(); ​int remainingTime timeout - timer.elapsed();if (remainingTime 0)slowOperation2(remainingTime); } 另一个用例是为特定的时间片执行某个操作。为此QElapsedTimer 提供了 hasExpired() 便利函数可用于判断某些毫秒是否已经过去 void executeOperationsForTime(int ms) {QElapsedTimer timer;timer.start(); ​while (!timer.hasExpired(ms))slowOperation1(); } 在这种情况下使用 QDeadlineTimer 更为方便它计算未来的超时而不是跟踪经过的时间。QElapsedTimer 将在所有支持的平台上使用平台的单调参考时钟见 QElapsedTimer::isMonotonic()。这带来了额外的好处即 QElapsedTimer 对时间调整例如用户修正时间是免疫的。与 QTime 不同QElapsedTimer 也对时区设置的变化例如夏令时免疫。 另一方面这意味着 QElapsedTimer 的值只能与使用相同参考的其他值进行比较。如果从 QElapsedTimer 对象提取的参考时间QElapsedTimer::msecsSinceReference()被序列化这一点尤其重要。这些值不应在网络中交换或保存到磁盘因为无法确定接收数据的计算机节点是否与原始节点相同或者是否自那以来已经重启。 然而确实可以与在同一机器上运行的其他进程交换该值前提是它们也使用相同的参考时钟。QElapsedTimer 将始终使用相同的时钟因此与来自同一机器的其他进程的值进行比较是安全的。如果要与其他 API 生成的值进行比较应该检查使用的时钟是否与 QElapsedTimer 相同见 QElapsedTimer::clockType()。 API 成员/操作符类型说明QElapsedTimer()构造函数创建一个 QElapsedTimer 对象。QElapsedTimer::Duration durationElapsed() const (since 6.6)成员返回从计时器启动到现在经过的时间。QElapsedTimer::Duration durationTo(const QElapsedTimer other) const (since 6.6)成员返回当前计时器到另一个计时器之间的经过时间。qint64 elapsed() const成员返回自 start() 被调用以来的经过时间毫秒。bool hasExpired(qint64 timeout) const成员判断指定的超时是否已经到达。void invalidate()成员使计时器无效。bool isValid() const成员判断计时器是否有效。qint64 msecsSinceReference() const成员返回自参考时间以来经过的毫秒数。qint64 msecsTo(const QElapsedTimer other) const成员返回当前计时器到另一个计时器的毫秒数。qint64 nsecsElapsed() const成员返回自 start() 被调用以来的经过时间纳秒。qint64 restart()成员重新启动计时器并返回自上次启动以来的经过时间毫秒。qint64 secsTo(const QElapsedTimer other) const成员返回当前计时器到另一个计时器的秒数。void start()成员启动计时器。QElapsedTimer::ClockType clockType()静态公共成员返回 QElapsedTimer 使用的时钟类型。bool isMonotonic()静态公共成员判断当前平台是否支持单调时钟。bool operator!(const QElapsedTimer lhs, const QElapsedTimer rhs)非成员操作符判断两个 QElapsedTimer 对象是否不相等。bool operator(const QElapsedTimer lhs, const QElapsedTimer rhs)非成员操作符判断第一个 QElapsedTimer 对象是否小于第二个。bool operator(const QElapsedTimer lhs, const QElapsedTimer rhs)非成员操作符判断两个 QElapsedTimer 对象是否相等。
http://www.w-s-a.com/news/168416/

相关文章:

  • 有没有专业做网站架构图的软件番禺建设网站哪个好
  • 建立网站第一步整站seo优化公司
  • php网站开发文章管理系统wordpress 评论 顶踩 心 插件
  • 网站做百度收录的意义html网页设计代码作业代码
  • 网站推广怎么做 知乎衡水做网站开发的
  • 重庆忠县网站建设报价网页构建
  • 怎么自己做单页网站怎么在阿里做网站
  • 公司网站重新备案做电商没几个能赚钱的
  • 网站开发我们都能解决怎样做网站吸引客户
  • 网站首页图片切换代码wordpress minfy
  • 什么程序做网站收录好企业搭建网站的必要性
  • 建设网站主题建站必须要域名吗
  • 网站建设海报设计购物平台网站建设框架
  • 湖北在线网站建设建一个网站迈年
  • 上班自己花钱做的网站网站首页的动态怎么做
  • 台州网站建设哪家便宜沧州最新消息今天
  • 建设网站 请示 报告wordpress会员制
  • 青岛建网站人做网站怎么赚钱广告
  • 网站建设哪家好公司跨境电商展会2023
  • 设计大神云集的网站是南通市 网站设计
  • 心理咨询网站模板企业画册封面设计
  • 做网站 南京网站建设的重难点分析
  • 深圳做网站980移动网站开发语言
  • 网站评论怎么做seo关键词优化方法
  • 市级部门网站建设自评报告网站优化文章怎么做
  • 可不可以异地建设网站学做网站培训班要多少钱
  • 茌平网站建设公司免费的云服务器有哪些
  • 手机网站单页面铜陵网站制作公司
  • 网站logo怎么做才清晰千库网官网首页登录
  • 山西省建设银行网站首页长沙网站建设制作