/** @brief Timer datatype */
class Timer {
+ const double date_;
+
public:
- const double date;
+ double get_date() const { return date_; }
+
std::remove_reference_t<decltype(kernel_timers())>::handle_type handle_;
- Timer(double date, xbt::Task<void()>&& callback) : date(date), callback(std::move(callback)) {}
+ Timer(double date, xbt::Task<void()>&& callback) : date_(date), callback(std::move(callback)) {}
xbt::Task<void()> callback;
void remove();
static Timer* set(double date, xbt::Task<void()>&& callback);
static double next() { return kernel_timers().empty() ? -1.0 : kernel_timers().top().first; }
+
+ /** Handle any pending timer. Returns if something was actually run. */
+ static bool execute_all();
};
} // namespace timer
double ActorImpl::get_kill_time() const
{
- return kill_timer_ ? kill_timer_->date : 0.0;
+ return kill_timer_ ? kill_timer_->get_date() : 0.0;
}
void ActorImpl::yield()
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
-#include "simgrid/kernel/Timer.hpp"
+#include <simgrid/kernel/Timer.hpp>
+#include <simgrid/simix.h>
namespace simgrid {
namespace kernel {
delete this;
}
+/** Handle any pending timer. Returns if something was actually run. */
+bool Timer::execute_all()
+{
+ bool result = false;
+ while (not kernel_timers().empty() && SIMIX_get_clock() >= kernel_timers().top().first) {
+ result = true;
+ // FIXME: make the timers being real callbacks (i.e. provide dispatchers that read and expand the args)
+ Timer* timer = kernel_timers().top().second;
+ kernel_timers().pop();
+ timer->callback();
+ delete timer;
+ }
+ return result;
+}
+
} // namespace timer
} // namespace kernel
} // namespace simgrid
}
}
-/** Handle any pending timer. Returns if something was actually run. */
-static bool SIMIX_execute_timers()
-{
- bool result = false;
- while (not simgrid::kernel::timer::kernel_timers().empty() &&
- SIMIX_get_clock() >= simgrid::kernel::timer::kernel_timers().top().first) {
- result = true;
- // FIXME: make the timers being real callbacks (i.e. provide dispatchers that read and expand the args)
- simgrid::kernel::timer::Timer* timer = simgrid::kernel::timer::kernel_timers().top().second;
- simgrid::kernel::timer::kernel_timers().pop();
- timer->callback();
- delete timer;
- }
- return result;
-}
-
/**
* @ingroup SIMIX_API
* @brief Run the main simulation loop.
// Execute timers and tasks until there isn't anything to be done:
bool again = false;
do {
- again = SIMIX_execute_timers();
+ again = simgrid::kernel::timer::Timer::execute_all();
if (simix_global->execute_tasks())
again = true;
simix_global->wake_all_waiting_actors();
/** @brief Returns the date at which the timer will trigger (or 0 if nullptr timer) */
double SIMIX_timer_get_date(smx_timer_t timer) // XBT_ATTRIB_DEPRECATED_v329
{
- return timer ? timer->date : 0.0;
+ return timer ? timer->get_date() : 0.0;
}
void SIMIX_display_process_status() // XBT_ATTRIB_DEPRECATED_v329