Disabling parallel compute for windows

This commit is contained in:
Yoann Audouin 2022-10-26 16:17:27 +02:00
parent 62ca7cff07
commit 3fb90fec5e
3 changed files with 32 additions and 3 deletions

View File

@ -27,8 +27,10 @@
//
//#define CHRONODEF
//
#ifndef WIN32
#include <boost/asio.hpp>
#endif
#include "SMESH_Gen.hxx"
#include "SMESH_DriverMesh.hxx"
@ -348,9 +350,15 @@ bool SMESH_Gen::parallelComputeSubMeshes(
smToCompute->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
continue;
}
#ifdef WIN32
compute_function(smToCompute, computeEvent,
shapeSM, aShapeOnly, allowedSubShapes,
aShapesId);
#else
boost::asio::post(*(aMesh._pool), std::bind(compute_function, smToCompute, computeEvent,
shapeSM, aShapeOnly, allowedSubShapes,
aShapesId));
#endif
}
// Waiting for the thread for Solids to finish
@ -361,7 +369,6 @@ bool SMESH_Gen::parallelComputeSubMeshes(
return ret;
};
//=============================================================================
/*
* Compute a mesh

View File

@ -239,9 +239,10 @@ SMESH_Mesh::~SMESH_Mesh()
int result=pthread_create(&thread, NULL, deleteMeshDS, (void*)_meshDS);
#endif
}
#ifndef WIN32
if(_pool)
DeletePoolThreads();
#endif
#ifndef _DEBUG_
fs::remove_all(tmp_folder);
#endif

View File

@ -29,6 +29,7 @@
#include "SMESH_SMESH.hxx"
#include "SMDSAbs_ElementType.hxx"
#include "SMESH_ComputeError.hxx"
#include "SMESH_Controls.hxx"
@ -49,8 +50,10 @@
#include <ostream>
#include <boost/filesystem.hpp>
#ifndef WIN32
#include <boost/asio/thread_pool.hpp>
#include <boost/thread.hpp>
#endif
#ifdef WIN32
#pragma warning(disable:4251) // Warning DLL Interface ...
@ -388,6 +391,19 @@ class SMESH_EXPORT SMESH_Mesh
// Parallel computation functions
#ifdef WIN32
void Lock() {};
void Unlock() {};
int GetNbThreads(){return _NbThreads;};
void SetNbThreads(int nbThreads){std::cout << "Warning Parallel Meshing is disabled on Windows it will behave as a slower normal compute" << std::endl;_NbThreads=nbThreads;};
void InitPoolThreads(){};
void DeletePoolThreads(){};
void wait(){}
bool IsParallel(){return _NbThreads > 0;}
#else
void Lock() {_my_lock.lock();};
void Unlock() {_my_lock.unlock();};
@ -400,10 +416,13 @@ class SMESH_EXPORT SMESH_Mesh
void wait(){_pool->join(); DeletePoolThreads(); InitPoolThreads(); }
bool IsParallel(){return _NbThreads > 0;}
#endif
// Temporary folder used during parallel Computation
boost::filesystem::path tmp_folder;
#ifndef WIN32
boost::asio::thread_pool * _pool = nullptr; //thread pool for computation
#endif
private:
@ -453,7 +472,9 @@ protected:
TCallUp* _callUp;
// Mutex for multhitreading write in SMESH_Mesh
#ifndef WIN32
boost::mutex _my_lock;
#endif
int _NbThreads=0;
protected: