-s4u::Actor::Actor(const char *name, s4u::Host *host, int argc, char **argv)
- : s4u::Actor::Actor(name,host, argc,argv, -1) {
-}
-s4u::Actor::Actor(const char *name, s4u::Host *host, int argc, char **argv, double killTime) {
- p_smx_process = simcall_process_create(name, s4u_actor_runner, this, host->getName(), killTime, argc, argv, NULL/*properties*/,0);
-
- xbt_assert(p_smx_process,"Cannot create the actor");
-// TRACE_msg_process_create(procname, simcall_process_get_PID(p_smx_process), host->getInferior());
-// simcall_process_on_exit(p_smx_process,(int_f_pvoid_pvoid_t)TRACE_msg_process_kill,p_smx_process);
+s4u::Actor::Actor(const char* name, s4u::Host *host, double killTime, std::function<void()> code)
+{
+ // TODO, when autorestart is used, the std::function is copied so the new
+ // instance will get a fresh (reinitialized) state. Is this what we want?
+ this->pimpl_ = SIMIX_process_ref(simcall_process_create(
+ name, std::move(code), nullptr, host->name().c_str(),
+ killTime, nullptr, 0));