2017-04-20 66 views
1

我在Windows上有一个Qt控制台应用程序。我想分析它,但QtCreator分析不适用于Windows。我可以通过Qt获得配置信号时隙执行持续时间吗?

我只使用了几个信号/插槽。应用程序是单线程的,每个连接是Qt::QueuedConnection

Qt可以记录执行从事件循环中调用的每个插槽需要多少时间?这将帮助我找到CPU瓶颈,而无需在程序中随处添加定时器。

当被调用的插槽执行时,是否可以重写插槽调用机制并测量时间?

+0

请注意,即使存在一些破解或替代性能分析解决方案,我仍然在寻找如何配置插槽执行的答案。 –

+0

插槽是一个通用功能。为什么不能使用分析器来测量执行函数需要多少时间? – vahancho

+0

@vahancho因为我不知道任何在Windows上可靠工作的通用分析器。相信我,我尝试了很多,他们都吸了。 –

回答

1

排队插槽呼叫作为QMetaCallEvent发送到接收QObject。因此,当它传递这些事件时,您可以计时QCoreApplication::notify:在该方法内调用QObject::event

这方面有两个方面:

  1. 时序和数据收集 - 见this answer为一个完整的例子。

  2. 解码QMetaCallEvent的内容以知道调用哪种方法 - 请参阅this question

+0

所以我实现了这个,它有点作品。但问题是我使用编译时信号/插槽语法(&MyClass :: mySlot)和target-> metaObject() - >方法(metaCall-> id())methodSignature()总是返回空字符串,因为元方法无效。你可以添加更多的细节,还是应该提出另一个具体的问题? –

+0

链接的问题仍然有效,它只需要处理现代调用语法的另一个答案。从新语法中获取方法签名也很容易。我还没有到达它。 –

+0

有什么我可以看看解决它?这并不像我需要的那样绝望 - 在这一点上,我最好在方法中使用手动定时器 - 但是我发现在Qt内部的东西中挖掘相当有趣。 –

相关问题