簡體   English   中英

使用QT和QOGL的多線程崩潰

[英]Multithreading Crash using QT and QOGL

我有一個在另一個窗口中構造的QOGLWidget小部件,該窗口由QMainwindow中的按鈕激活。 我正在嘗試將圖像的表面從窗口小部件發送到主窗口的QOGLWidget,它崩潰的問題是第一次出現異常訪問沖突。

我認為在這種情況下可能會發生三件事:

Qt的::自動連接

框架生成器和GUI之間的連接(SimulatorWindow + GLSimulatorWidget)通過Qt :: AutoConnection連接,並且當它們駐留在單獨的線程上時最終變成Qt :: DirectConnection 指定Qt :: QueuedConnection的連接以克服此問題(如果確實在單獨的線程上)。

QPixmap訴QImage

您可能正在GUI線程之外處理QPixmap 這通常會打印出警告,但也許仍然起作用。 通常,如果您不在GUI線程中處理圖像,然后將其發送到GUI線程,則需要使用QPixmap之外的其他功能,例如QImage

在堆棧上初始化

您的框架對象到達GUI時可能已超出范圍。 例如,如果您構建一個框架,並將其存儲在堆棧的本地范圍內,然后將其傳遞到處理程序或容器中...

...然后,當您離開本地作用域以在GUI中表示對象時,框架對象將消失,並且處理程序/容器將保留錯誤的指針。

要解決此問題,請初始化到堆上並堅持使用Qt Object Model 另外,我還希望將容器放在堆上作為它們所屬類的成員變量。

因此,總而言之,請執行以下操作:檢查連接類型,以及幀生成器是否在GUI線程上,如果您位於非GUI的線程中,請使用QImage而不是QPixmap,並確保指針不會超出范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM