我在Windows上有一個Qt控制檯應用程序。我想分析它,但QtCreator分析不適用於Windows。我可以通過Qt獲得配置信號時隙執行持續時間嗎?
我只使用了幾個信號/插槽。應用程序是單線程的,每個連接是Qt::QueuedConnection
。
Qt可以記錄執行從事件循環中調用的每個插槽需要多少時間?這將幫助我找到CPU瓶頸,而無需在程序中隨處添加定時器。
當被調用的插槽執行時,是否可以重寫插槽調用機制並測量時間?
我在Windows上有一個Qt控制檯應用程序。我想分析它,但QtCreator分析不適用於Windows。我可以通過Qt獲得配置信號時隙執行持續時間嗎?
我只使用了幾個信號/插槽。應用程序是單線程的,每個連接是Qt::QueuedConnection
。
Qt可以記錄執行從事件循環中調用的每個插槽需要多少時間?這將幫助我找到CPU瓶頸,而無需在程序中隨處添加定時器。
當被調用的插槽執行時,是否可以重寫插槽調用機制並測量時間?
排隊插槽呼叫作爲QMetaCallEvent
發送到接收QObject
。因此,當它傳遞這些事件時,您可以計時QCoreApplication::notify
:在該方法內調用QObject::event
。
這方面有兩個方面:
時序和數據收集 - 見this answer爲一個完整的例子。
解碼QMetaCallEvent
的內容以知道調用哪種方法 - 請參閱this question。
所以我實現了這個,它有點作品。但問題是我使用編譯時信號/插槽語法(&MyClass :: mySlot)和target-> metaObject() - >方法(metaCall-> id())methodSignature()總是返回空字符串,因爲元方法無效。你可以添加更多的細節,還是應該提出另一個具體的問題? –
鏈接的問題仍然有效,它只需要處理現代調用語法的另一個答案。從新語法中獲取方法簽名也很容易。我還沒有到達它。 –
有什麼我可以看看解決它?這並不像我需要的那樣絕望 - 在這一點上,我最好在方法中使用手動定時器 - 但是我發現在Qt內部的東西中挖掘相當有趣。 –
請注意,即使存在一些破解或替代性能分析解決方案,我仍然在尋找如何配置插槽執行的答案。 –
插槽是一個通用功能。爲什麼不能使用分析器來測量執行函數需要多少時間? – vahancho
@vahancho因爲我不知道任何在Windows上可靠工作的通用分析器。相信我,我嘗試了很多,他們都吸了。 –