hi,all
I want to use multithread to read many small file , I test the following code,
but it seen as if some bugs in it.
help me! thanks!
class ReadNodeFileThread:public OpenThreads::Thread
{
public:
ReadNodeFileThread(void){
_fileName = "";
_loadOptions = 0;
_hadLoaded = false;
_done = false;
}
virtual void run()
{
while(true)
{
_mutex.lock();
if(_done) break;
if(!_hadLoaded)
{
_loadedModel =
osgDB::readNodeFile(_fileName,_loadOptions.get());
_hadLoaded = true;
}
_mutex.unlock();
OpenThreads::Thread::YieldCurrentThread();
}
}
void setParam(const std::string& filename,const
osgDB::ReaderWriter::Options* options )
{
_mutex.lock();
_fileName = filename;
_loadOptions =
options?static_cast<osgDB::ReaderWriter::Options*>(options->clone(osg::CopyOp::SHALLOW_COPY)):new
osgDB::ReaderWriter::Options;
_hadLoaded = false;
_mutex.unlock();
}
osg::Node* getLoadedModel()
{
osg::Node* node=0;
_mutex.lock();
if(_hadLoaded)
node = _loadedModel.get();
std::cout<<"loadfinished"<<_fileName<<std::endl;
_mutex.unlock();
return node;
}
void setDone(bool done)
{
_mutex.lock();
_done = true;
_mutex.unlock();
}
protected:
~ReadNodeFileThread(void){
}
osg::ref_ptr<osg::Node>
_loadedModel;
std::string
_fileName;
osg::ref_ptr<osgDB::ReaderWriter::Options> _loadOptions;
bool
_hadLoaded;
bool
_done;
OpenThreads::Mutex
_mutex;
};
Lilinx 2007
09 24
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org