我可以让 Qt 分析信号槽执行持续时间吗?
Can I get Qt to profile signal-slot execution duration?
我在 windows 上有一个 Qt 控制台应用程序。我想分析它,但 QtCreator 分析在 windows.
上不起作用
我只用了一些 signals/slots。该应用程序是单线程的,每个连接都是 Qt::QueuedConnection
.
Qt 可以记录执行从事件循环调用的每个槽所花费的时间吗?这将帮助我找到 CPU 瓶颈,而无需在程序的任何地方手动添加计时器。
是否可以覆盖槽调用机制并测量被调用槽执行时的时间?
排队的插槽调用作为 QMetaCallEvent
传递给接收方 QObject
。因此,您可以在 QCoreApplication::notify
传递这些事件时计时:QObject::event
是从该方法中调用的。
这有两个方面:
计时和数据收集 - 请参阅 this answer 了解完整示例。
解码 QMetaCallEvent
的内容以了解调用了哪个方法 - 参见 this question.
我在 windows 上有一个 Qt 控制台应用程序。我想分析它,但 QtCreator 分析在 windows.
上不起作用我只用了一些 signals/slots。该应用程序是单线程的,每个连接都是 Qt::QueuedConnection
.
Qt 可以记录执行从事件循环调用的每个槽所花费的时间吗?这将帮助我找到 CPU 瓶颈,而无需在程序的任何地方手动添加计时器。
是否可以覆盖槽调用机制并测量被调用槽执行时的时间?
排队的插槽调用作为 QMetaCallEvent
传递给接收方 QObject
。因此,您可以在 QCoreApplication::notify
传递这些事件时计时:QObject::event
是从该方法中调用的。
这有两个方面:
计时和数据收集 - 请参阅 this answer 了解完整示例。
解码
QMetaCallEvent
的内容以了解调用了哪个方法 - 参见 this question.