随意使用
信号槽是很危险的一件事情,如果不加限制,项目的代码量多了,一旦出现了槽的重复调用,想要修复这个BUG,非常困难。
原则上来讲,只要接受信号的槽不继续发信号,就不会造成嵌套。但是项目大了后,这个基本不可能得到保证。
1.不可能在槽里面调用的所有的函数都一层一层去查看有
没有继续发信号
2修改一个需求,槽函数里面增加一个函数调用,还要先去查看这个函数有没有发信号,这个不现实
3团队之间不同模块是不同的程序员维护的,不能保证所有人都严格遵守槽函数里面不发信号这个规则
附上demo示例:
杜绝信号槽嵌套问题 MessageManager.rar (10 K) 下载次数:255 1 MessageCenter负责模块之间的通信,转发模块之间的消息时加锁,防止模块之间的消息嵌套。
2 信号槽来实现一个模块内部的通信,其中AutoSlotsLocker和SlotsLocker类控制信号槽的加锁,防止信号槽的嵌套。