gpt4 book ai didi

c++ - QT条件信号发射-效率

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:36 26 4
gpt4 key购买 nike

我已经有了一个更大的项目和架构,遇到了 QT 信号槽系统的情况,信号非常均匀,问题是:1. 许多不同的信号方法具有不同的名称,例如

signals:
sig_1(bool b);
sig_2(bool b);
...
sig_n(bool b);

或:2. 发出差异作为参数

signal:
sig(uint n, bool b);

并让插槽方法决定 n 是否适合它的内部值

每个选项都比另一个更差:

  1. 很棒的代码,我更喜欢通用的解决方案
  2. 每个插槽都必须检查它的编号是否适合,所以一行每次 O(n) 连接,当 moc 已经准备好通过一个开关 block 时,我们可以达到 O(log n)

情况:发射器是一个微 Controller 抽象,并在输入变化时得到通知。许多插槽类只连接了一个或两个输入,需要通知它们的变化。从结构上讲,发射类不应依赖于插槽类,因此不应保留其监听器列表或包含监听器的公共(public)父类(super class)或接口(interface),这就是我坚持使用信号/插槽系统的原因。

所以我的问题:sig/slot 系统或 moc 中是否有某种扩展或参数,或者我在这里完全错过了什么?

最佳答案

Qt 中有一个类叫做QSignalMapper这有助于管理多对一连接,但据我所知,它并不能自动解决多对多问题

您可以尝试取消直接(发射器-接收器)连接的想法,并尝试在中间使用共享数据 vector 。只发出一个信号(“数据已更新”)。接收者将收到有关更新的通知,并仅从共享数据对象中提取他们需要的数据(如果不考虑线程安全,这可以像映射一样简单)。

如果数据 vector 很小并且复制起来相对便宜,您可以简单地将整个 vector/映射直接发送给每个人(如上所述,在 Qt5 中直接连接导致直接函数调用,所以这不会是全部慢)


关于c++ - QT条件信号发射-效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41567774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com