X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/533b09bd161a7a8bef036a14bbcb8793286b9d9f..c139b4e36702f58bd8a75e87cf537959da82dbc9:/src/s4u/s4u_exec.cpp diff --git a/src/s4u/s4u_exec.cpp b/src/s4u/s4u_exec.cpp index 222ca130f7..e7a16ae48c 100644 --- a/src/s4u/s4u_exec.cpp +++ b/src/s4u/s4u_exec.cpp @@ -13,20 +13,25 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_exec, s4u_activity, "S4U asynchronous execut namespace simgrid { namespace s4u { -void Exec::start() +Activity* Exec::start() { pimpl_ = simcall_execution_start(nullptr, flops_amount_, 1 / priority_, 0., host_); + boost::static_pointer_cast(pimpl_)->setBound(bound_); state_ = started; + return this; } -void Exec::wait() +Activity* Exec::wait() { simcall_execution_wait(pimpl_); + state_ = finished; + return this; } -void Exec::wait(double timeout) +Activity* Exec::wait(double timeout) { THROW_UNIMPLEMENTED; + return this; } bool Exec::test() @@ -41,16 +46,33 @@ bool Exec::test() this->start(); } + if (simcall_execution_test(pimpl_)) { + state_ = finished; + return true; + } + return false; } ExecPtr Exec::setPriority(double priority) { + xbt_assert(state_ == inited, "Cannot change the priority of an exec after its start"); priority_ = priority; return this; } + +ExecPtr Exec::setBound(double bound) +{ + xbt_assert(state_ == inited, "Cannot change the bound of an exec after its start"); + bound_ = bound; + return this; +} + ExecPtr Exec::setHost(Host* host) { + xbt_assert(state_ == inited || state_ == started, "Cannot change the host of an exec once it's done (state: %d)", state_); + if (state_ == started) + boost::static_pointer_cast(pimpl_)->migrate(host); host_ = host; return this; }