osg中Util::EarthManipulator导致程序无法正常退出
时间: 2024-03-09 08:48:44 浏览: 64
通过osg::ShapeDrawable实现简单的点线面标绘
使用Util::EarthManipulator可能会导致程序无法正常退出的问题,这是因为EarthManipulator在析构时会调用一个CefShutdown函数,而该函数会造成线程死锁。要解决这个问题,可以使用以下方法:
1.在退出程序时手动调用CefShutdown函数,以避免在程序退出时调用该函数。例如,在Qt程序中,可以在MainWindow的closeEvent()方法中调用CefShutdown函数:
```
void MainWindow::closeEvent(QCloseEvent *event) {
CefShutdown();
QMainWindow::closeEvent(event);
}
```
2.使用其他摄像机控制器代替EarthManipulator,例如osgGA::TrackballManipulator、osgGA::FlightManipulator等。这些控制器不会触发CefShutdown函数,因此可以避免程序无法正常退出的问题。
3.修改EarthManipulator的源代码,禁止在析构时调用CefShutdown函数。这种方法需要对EarthManipulator的源代码进行修改,并且需要注意修改后的代码是否会影响到程序的其他功能。
总之,避免使用EarthManipulator或者在程序退出时手动调用CefShutdown函数是解决程序无法正常退出的问题的两种常见方法。
阅读全文