User interface A C++;基于11的信号/插槽,带订购
我在这里可能有点不知所措,但如果你从不尝试新事物,我想你永远也学不会。我正在处理一些多点触摸的东西,并为自己构建了一个小型但功能强大的GUI库。到目前为止,我一直使用boosts Signals2库将检测到的手势分发到所有活动GUI元素(无论是否在屏幕上)。我是一个避免早熟优化的超级粉丝,所以到目前为止,事情一直都很糟糕 我使用vs2013的探查器发现,当用户疯狂触摸(该设备支持多达41次同时触摸)时,我的系统就会停止,而信号2就是罪魁祸首。请记住,每次触摸都会触发许多手势,这些手势都会传递给已注册与此类手势交互的每个GUI元素 现在有很多方法可以解决这个瓶颈:User interface A C++;基于11的信号/插槽,带订购,user-interface,c++11,signals-slots,User Interface,C++11,Signals Slots,我在这里可能有点不知所措,但如果你从不尝试新事物,我想你永远也学不会。我正在处理一些多点触摸的东西,并为自己构建了一个小型但功能强大的GUI库。到目前为止,我一直使用boosts Signals2库将检测到的手势分发到所有活动GUI元素(无论是否在屏幕上)。我是一个避免早熟优化的超级粉丝,所以到目前为止,事情一直都很糟糕 我使用vs2013的探查器发现,当用户疯狂触摸(该设备支持多达41次同时触摸)时,我的系统就会停止,而信号2就是罪魁祸首。请记住,每次触摸都会触发许多手势,这些手势都会传递给已
- 插槽必须能够返回结束发射的值-有效地取消信号的任何后续处理
- 插槽必须能够订购,并且在这方面相当有效。与之交互的GUI元素将在其他元素的上方弹出,因此这种类型的顺序更改必然会经常发生
- 可阻塞连接(通过简单的IF语句实现)
- 深度/顺序参数(线性搜索插入)
- 阻塞的连接只是被跳过,而不是主动从数据结构中删除,因此有大量阻塞的连接将影响运行时性能
- 深度仅在插入期间保持。因此,如果您想更改深度,您必须断开并重新连接插槽
- 由于SignalLink接口已公开(由于我的块实现),因此从用户的角度来看,它不太安全。使用这个版本,你可以更容易地通过干扰现有的引用和指针来攻击自己
- 我敢肯定,这个实现还没有像最初的实现那样经过彻底的测试。我确实尝试了一下新功能。用户注意
signal::stop()
方法来停止触发的信号。只能在插槽构造时对连接进行排序,但定义动态排序将非常简单。连接存储在向量中,假设每个信号只有几个插槽。