zoukankan      html  css  js  c++  java
  • Qt如果发送信号过快会如何?

    背景

    • 有一个长耗时的后台计算线程
    • 计算过程中每隔100ms会发出刷新GUI元素的信号
    • 假设发送100次这个信号
    • 窗口重绘需要花费超过100ms的时间,假设是1s

    问题

    在事件循环中会发生什么?信号是否会堆积直到它们都执行完(100s)?是否有丢弃事件的机制?

    回答一:

    用户事件永远不会丢弃。如果发送信号过快超过处理时间,时间会排队指导耗尽内存而程序崩溃。然而,QTimer在负载过重时会跳过超时事件。这在某种程度上调节了负载。
    你可以从一个消费者线程中发送反馈(比如通知)给生产者线程,根据消费者落后多久来手动调整生产者线程的发送时间。或者将信号槽换成阻塞连接的方式。

    回答二:

    在这个例子中可以计算绘制时间,比如绘制花费240ms,那么你在后面两次收到信号时不再绘制,也就是忽略信号,这样信号就不会堆积了。

  • 相关阅读:
    02.CentOS Linux 7.7 Nginx安装部署文档
    rpm操作
    mysql命令行备份方法
    nginx reload的原理
    Linux操作笔记
    mysql账户授权
    centos系统内核升级
    docker随笔
    linux系统查看当前正在运行的服务
    数据库锁表问题
  • 原文地址:https://www.cnblogs.com/nuoforever/p/15619241.html
Copyright © 2011-2022 走看看