osgViewer.ThreadingHandler
是 OpenSceneGraph (OSG)库中的一个处理器,可用于在多线程应用程序中增加线程安全性。
在多线程应用程序中运行 OSG 时,需要确保多个线程之间的数据访问和修改安全。pthread
库(POSIX 线程库)在一些平台上可用,但不是跨平台的。因此,OSG 提供了一些自己的线程处理机制。
osgViewer.ThreadingHandler
是一种线程处理器,可以为 OSG 应用程序提供以下功能:
线程安全的图形用户界面更新功能。
线程安全的日志记录功能。
多线程渲染。
在使用 osgViewer.ThreadingHandler
前,需要首先创建一个 osgViewer::Viewer
对象,然后调用 osgViewer::Viewer::setThreadingModel
方法设置线程模型为 osgViewer::Viewer::SingleThreaded
,osgViewer::Viewer::CullDrawThreadPerContext
或者 osgViewer::Viewer::AutomaticSelection
:
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);
接下来,创建一个 osgViewer::ThreadingHandler
对象,并通过调用 addWorkItem
方法将需要在主线程执行的工作项目加入到队列中。
osg::ref_ptr<osgViewer::ThreadingHandler> threadingHandler = new osgViewer::ThreadingHandler;
threadingHandler->addWorkItem(new MyWorkItem());
osgViewer::ThreadingHandler
还可以与 osgViewer::StatsHandler
结合使用,用于在多线程应用程序中输出统计信息。
viewer->addEventHandler(new osgViewer::StatsHandler);
viewer->addEventHandler(threadingHandler);