Exemplo n.º 1
0
	/**
	 * \brief Perform system experiment.
	 */
	public: void run()
	{
		typedef typename app_experiment_container::const_iterator app_experiment_iterator;
//		typedef typename monitor_container::const_iterator monitor_iterator;

		DCS_DEBUG_TRACE( "BEGIN Execution of System EXPERIMENT" );

		app_experiment_iterator app_exp_end_it(app_exps_.end());
		app_experiment_iterator app_exp_beg_it(app_exps_.begin());

		(*p_sta_sig_)(*this);

		if (app_exp_beg_it != app_exp_end_it)
		{
			// There is some experiment to run

			::boost::thread_group exp_thds;
			// Create threads for application experiments
			for (app_experiment_iterator app_exp_it = app_exp_beg_it;
				 app_exp_it != app_exp_end_it;
				 ++app_exp_it)
			{
				app_experiment_pointer p_app_exp(*app_exp_it);

				detail::runnable<app_experiment_type> exp_runner(*app_exp_it);
				//::boost::thread exp_thd(exp_runner);
				exp_thds.create_thread(exp_runner);
				//::boost::this_thread::sleep_for(::boost::chrono::seconds(2));
			}
//			// Create threads for experiment monitors
//			system_experiment_context<traits_type> ctx(this);
//			monitor_iterator mon_end_it(mons_.end());
//			for (monitor_iterator mon_it = mons_.begin();
//				 mon_it != mon_end_it;
//				 ++mon_it)
//			{
//				monitor_pointer p_mon(*mon_it);
//
//				detail::monitor_runnable<monitor_type> mon_runner(p_mon, ctx);
//				exp_thds.create_thread(mon_runner);
//			}
			running_ = true;
			exp_thds.join_all();
			running_ = false;
		}

		(*p_sto_sig_)(*this);

		DCS_DEBUG_TRACE( "END Execution of System EXPERIMENT" );
	}
Exemplo n.º 2
0
	public: void track(sys_experiment_type& exp)
	{
		exp.add_on_start_handler(::boost::bind(&self_type::on_start, this, ::_1));
		::std::vector<app_experiment_pointer> app_exps(exp.experiments());
		for (::std::size_t i = 0; i < app_exps.size(); ++i)
		{
			app_experiment_pointer p_app_exp(app_exps[i]);
			p_app_exp->add_on_start_handler(::boost::bind(&self_type::on_app_start, this, ::_1));
			p_app_exp->manager().add_on_sample_handler(::boost::bind(&self_type::on_app_sample, this, *p_app_exp, ::_1));
			p_app_exp->manager().add_on_control_handler(::boost::bind(&self_type::on_app_control, this, *p_app_exp, ::_1));
			p_app_exp->add_on_stop_handler(::boost::bind(&self_type::on_app_stop, this, ::_1));
		}
		exp.add_on_stop_handler(::boost::bind(&self_type::on_stop, this, ::_1));
	}