2017-04-20 62 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內部的東西中挖掘相當有趣。 –

相關問題