From: <ole...@us...> - 2012-12-25 23:24:46
|
Revision: 1918 http://opende.svn.sourceforge.net/opende/?rev=1918&view=rev Author: oleh_derevenko Date: 2012-12-25 23:24:39 +0000 (Tue, 25 Dec 2012) Log Message: ----------- Changed: Threading usage option added to demo_crash. Modified Paths: -------------- trunk/ode/demo/demo_crash.cpp Modified: trunk/ode/demo/demo_crash.cpp =================================================================== --- trunk/ode/demo/demo_crash.cpp 2012-12-25 22:45:30 UTC (rev 1917) +++ trunk/ode/demo/demo_crash.cpp 2012-12-25 23:24:39 UTC (rev 1918) @@ -81,6 +81,8 @@ static dWorldID world; static dSpaceID space; +static dThreadingImplementationID threading; +static dThreadingThreadPoolID pool; static dBodyID body[10000]; static int bodies; static dJointID joint[100000]; @@ -229,19 +231,29 @@ sphereI += 4; } +static +void shutdownSimulation() +{ + // destroy world if it exists + if (bodies) + { + dThreadingImplementationShutdownProcessing(threading); + dThreadingFreeThreadPool(pool); + dWorldSetStepThreadingImplementation(world, NULL, NULL); + dThreadingFreeImplementation(threading); -void resetSimulation() + dJointGroupDestroy (contactgroup); + dSpaceDestroy (space); + dWorldDestroy (world); + + bodies = 0; + } +} + +static +void setupSimulation() { int i; - i = 0; - // destroy world if it exists - if (bodies) - { - dJointGroupDestroy (contactgroup); - dSpaceDestroy (space); - dWorldDestroy (world); - } - for (i = 0; i < 1000; i++) wb_stepsdis[i] = 0; @@ -258,6 +270,14 @@ dWorldSetCFM (world, 1e-5); dWorldSetERP (world, 0.8); dWorldSetQuickStepNumIterations (world,ITERS); + + threading = dThreadingAllocateMultiThreadedImplementation(); + pool = dThreadingAllocateThreadPool(4, 0, dAllocateFlagBasicData, NULL); + dThreadingThreadPoolServeMultiThreadedImplementation(pool, threading); + // dWorldSetStepIslandsProcessingMaxThreadCount(world, 1); + dWorldSetStepThreadingImplementation(world, dThreadingImplementationGetFunctions(threading), threading); + + ground = dCreatePlane (space,0,0,1,0); bodies = 0; @@ -447,7 +467,8 @@ doFast = !doFast; break; case 'r': case 'R': - resetSimulation(); + shutdownSimulation(); + setupSimulation(); break; case '[': cannon_angle += 0.1; @@ -610,14 +631,12 @@ boxes = 0; spheres = 0; - resetSimulation(); + setupSimulation(); // run simulation dsSimulationLoop (argc,argv,352,288,&fn); - dJointGroupDestroy (contactgroup); - dSpaceDestroy (space); - dWorldDestroy (world); + shutdownSimulation(); dCloseODE(); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |