@@ -64,6 +64,7 @@ NetworkEditorController::NetworkEditorController(ModuleFactoryHandle mf, ModuleS
6464 reexFactory_(reex),
6565 executorFactory_(executorFactory),
6666 serializationManager_(nesm),
67+ executionManager_(currentExecutor_), // TODO: pass in factory instead
6768 signalSwitch_(true )
6869{
6970 dynamicPortManager_.reset (new DynamicPortManager (connectionAdded_, connectionRemoved_, this ));
@@ -76,7 +77,7 @@ NetworkEditorController::NetworkEditorController(ModuleFactoryHandle mf, ModuleS
7677}
7778
7879NetworkEditorController::NetworkEditorController (SCIRun::Dataflow::Networks::NetworkHandle network, ExecutionStrategyFactoryHandle executorFactory, NetworkEditorSerializationManager* nesm)
79- : theNetwork_(network), executorFactory_(executorFactory), serializationManager_(nesm)
80+ : theNetwork_(network), executorFactory_(executorFactory), serializationManager_(nesm), executionManager_(currentExecutor_) // TODO: pass in factory instead
8081{
8182}
8283
@@ -367,7 +368,31 @@ void NetworkEditorController::executeGeneric(const ExecutableLookup* lookup, Mod
367368{
368369 initExecutor ();
369370 auto context = createExecutionContext (lookup, filter);
370- currentExecutor_->execute (*context);
371+
372+ executionManager_.enqueueContext (context);
373+ }
374+
375+ ExecutionQueueManager::ExecutionQueueManager (ExecutionStrategyHandle& currentExecutor) : contexts_(1 ), currentExecutor_(currentExecutor),
376+ executionLaunchThread_([this ]() {executeTopContext (); } )
377+ {
378+ }
379+
380+ void ExecutionQueueManager::enqueueContext (ExecutionContextHandle context)
381+ {
382+ if (contexts_.push (context))
383+ std::cout << " ctx queued" << std::endl;
384+ else
385+ std::cout << " ctx queue is full" << std::endl;
386+ }
387+
388+ void ExecutionQueueManager::executeTopContext ()
389+ {
390+ while (true )
391+ {
392+ if (contexts_.read_available ())
393+ contexts_.consume_one ([&](ExecutionContextHandle ctx) { currentExecutor_->execute (*ctx); });
394+ boost::this_thread::sleep (boost::posix_time::milliseconds (1000 ));
395+ }
371396}
372397
373398NetworkHandle NetworkEditorController::getNetwork () const
0 commit comments