我在Qt中編寫了一個程序,該程序運行10個工作線程,該線程計算空間中對象的軌跡。他們也必須繪製物體的路徑。我有一個派生QGraphicsEllipseItem的「Body」類,它有一個QPainterPath。 「模擬」課程列出了世界上的障礙物,身體模擬並運行,直到身體碰撞某物。模擬在單獨的線程中運行(使用moveToThread完成,而不是通過繼承QThread)。當身體發生碰撞時,模擬發出一個信號說明它已完成。當所有線程都完成時,我想繪製路徑(我通過調用「Body」中的方法來執行此操作,該方法在其繪圖方法中啓用路徑繪製)。從Qt中的多個線程繪製
不幸的是,我得到ASSERT錯誤:
ASSERT: "!unindexedItems.contains(item)" in file graphicsview\qgraphicsscenebsptreeindex.cpp, line 364
他們看似隨機發生。我試過不同的連接類型,但沒有結果。
我開始循環中的線程。
我正在使用Qt 5.0
「理想情況下,這些不會是Qt對象,儘管如果您非常小心,可能會使用某些Qt類」?有大量的類可以在GUI線程之外使用...有數字會很有趣,但我會說只有一小部分Qt不能在GUI線程之外使用。 – 2013-04-28 11:16:48
@LucaCarlon我的觀點是,如果你使用Qt類,你需要驗證它們是否安全使用,而如果你使用非Qt類,幾乎可以保證它不會有任何非明顯的與Qt GUI線程的交互。 – 2013-04-28 17:12:18
有關Qt和多線程的一些指導方針在這裏:http://www.informit.com/articles/article.aspx?p=1405551&seqNum=4 – 2013-04-28 17:16:49