使用QT和QOGL的多线程崩溃
Multithreading Crash using QT and QOGL
我有一个QOGLWidget小部件,它是在另一个窗口中构建的,由QMainwindow中的按钮激活。我正试图将图像的表面从小部件发送到主窗口的QOGLWidget,问题是它崩溃了,并首次出现异常访问违规。
我认为在这种情况下可能会发生三件事:
问题::自动连接
帧生成器和GUI(SimulatorWindow+GLSimulatorWidget)之间的连接由Qt::AutoConnection连接,当它们位于单独的线程上时,最终会变成Qt::DirectConnection。指定Qt::QueuedConnection的连接以解决此问题(如果它们确实在单独的线程上)。
QPixmap诉QImage
您可以在GUI线程之外处理QPixmaps。这通常会打印出警告,但可能仍然有效。通常,如果您处理一个不在GUI线程中的图像,然后将其发送到GUI线程,则需要使用QPixmap之外的东西,如QImage。
堆栈上的初始化
当框架对象到达GUI时,它可能已经超出了范围。例如,如果您构建一个框架,并将其存储在堆栈的本地作用域中,然后将其传递到处理程序或容器中。。。
然后,当您将本地作用域留给在GUI中表示对象时,您的框架对象将消失,并且您的处理程序/容器将保留一个错误的指针。
要解决此问题,请在堆上初始化并坚持使用Qt对象模型。此外,我喜欢让堆上的容器也作为它们所属类的成员变量
综上所述:检查你的连接类型,如果你的帧生成器是否在GUI线程上,如果你在一个不是GUI的线程中,请使用QImage而不是QPixmap,并确保你的指针没有超出范围。
相关文章:
- 为什么我的多线程作业队列崩溃
- C/C++ Linux 上的多线程服务器/客户端崩溃
- 在官方 ZeroMQ 多线程示例的修改版本中崩溃
- C 多线程崩溃应用程序
- 使用多线程崩溃
- C++多线程应用程序崩溃
- 使用OpenSSL和锁随机崩溃的多线程程序
- 设置(C++)多线程调试(/MTd)时会发生崩溃
- 简单的多线程fastcgi应用程序总是崩溃
- 使用QT和QOGL的多线程崩溃
- 由于删除c++Qt多线程应用程序中的指针而导致崩溃
- 多线程SQLite崩溃
- CRT参数验证使多线程调试程序崩溃
- Log4cplus api在多线程环境下崩溃
- 在多线程C++程序中使用std::vector时导致应用程序崩溃
- 多线程Win32 c++程序在多线程中使用try/catch时会崩溃
- 如何使用多线程使系统崩溃
- 在std::map clear() -多线程时崩溃
- 多线程c++应用程序的崩溃处理
- 来自回溯的堆栈跟踪未显示导致多线程环境下崩溃的方法