Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Deprecate SIMIX_get_clock().
[simgrid.git] / src / kernel / timer / Timer.cpp
1 /* Copyright (c) 2021. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #include <simgrid/kernel/Timer.hpp>
8 #include <simgrid/s4u/Engine.hpp>
9 #include <simgrid/simix.h>
10
11 namespace simgrid {
12 namespace kernel {
13 namespace timer {
14
15 Timer* Timer::set(double date, xbt::Task<void()>&& callback)
16 {
17   auto* timer    = new Timer(date, std::move(callback));
18   timer->handle_ = kernel_timers().emplace(std::make_pair(date, timer));
19   return timer;
20 }
21
22 /** @brief cancels a timer that was added earlier */
23 void Timer::remove()
24 {
25   kernel_timers().erase(handle_);
26   delete this;
27 }
28
29 /** Handle any pending timer. Returns if something was actually run. */
30 bool Timer::execute_all()
31 {
32   bool result = false;
33   while (not kernel_timers().empty() && s4u::Engine::get_clock() >= kernel_timers().top().first) {
34     result = true;
35     // FIXME: make the timers being real callbacks (i.e. provide dispatchers that read and expand the args)
36     Timer* timer = kernel_timers().top().second;
37     kernel_timers().pop();
38     timer->callback();
39     delete timer;
40   }
41   return result;
42 }
43
44 } // namespace timer
45 } // namespace kernel
46 } // namespace simgrid