#include "SMESH_Gen.hxx"
-#include "DriverMesh.hxx"
+#include "SMESH_DriverMesh.hxx"
#include "SMDS_Mesh.hxx"
#include "SMDS_MeshElement.hxx"
#include "SMDS_MeshNode.hxx"
#include "memoire.h"
#include <chrono>
+#include <functional>
#ifdef WIN32
#include <windows.h>
using namespace std;
#include <boost/filesystem.hpp>
+#include <boost/asio.hpp>
namespace fs = boost::filesystem;
// Environment variable separator
sm->SetAllowedSubShapes( nullptr );
}
- // TODO: Check if this is necessary
if ( aShapesId )
aShapesId->insert( sm->GetId() );
// ===============================================
TopAbs_ShapeEnum previousShapeType = TopAbs_VERTEX;
- std::vector<std::future<void>> pending;
int nbThreads = aMesh.GetNbThreads();
auto begin = std::chrono::high_resolution_clock::now();
+ std::cout << "Running mesh with threads: " << nbThreads << " mesher: " << aMesh.GetMesherNbThreads() << std::endl;
smIt = shapeSM->getDependsOnIterator(includeSelf, !complexShapeFirst);
//DEBUG std::cout << "Shape Type" << shapeType << " previous" << previousShapeType << std::endl;
if ((aMesh.IsParallel()||nbThreads!=0) && shapeType != previousShapeType) {
// Waiting for all threads for the previous type to end
- for(auto &it: pending){
- it.wait();
- }
+ aMesh.wait();
std::string file_name;
switch(previousShapeType){
{
fs::path mesh_file = fs::path(aMesh.tmp_folder) / fs::path(file_name);
// TODO: change mesh name
- export_mesh(mesh_file.string(), aMesh, "Maillage_1");
+ exportMesh(mesh_file.string(), aMesh, "Maillage_1");
}
//Resetting threaded pool info
previousShapeType = shapeType;
- pending.clear();
}
// check for preview dimension limitations
}
if(aMesh.IsParallel())
{
- pending.push_back(aMesh._pool->push(compute_function, smToCompute, computeEvent,
- shapeSM, aShapeOnly, allowedSubShapes,
- aShapesId));
+ boost::asio::post(*(aMesh._pool), std::bind(compute_function, 1, smToCompute, computeEvent,
+ shapeSM, aShapeOnly, allowedSubShapes,
+ aShapesId));
} else {
auto begin2 = std::chrono::high_resolution_clock::now();
shapeSM, aShapeOnly, allowedSubShapes,
aShapesId);
-
-
if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE &&
( shapeType != TopAbs_EDGE || !SMESH_Algo::isDegenerated( TopoDS::Edge( shape ))))
ret = false;
// TODO: Check error handling in parallel mode
if(aMesh.IsParallel()){
// Waiting for the thread for Solids to finish
- for(auto &it:pending){
- it.wait();
- }
- pending.clear();
+ aMesh.wait();
}
aMesh.GetMeshDS()->Modified();