/workspaces/astro/sol3-sdk/cpp/sol3/core/async_periodic.h Source File

Space-ng SDK: /workspaces/astro/sol3-sdk/cpp/sol3/core/async_periodic.h Source File
Space-ng SDK
async_periodic.h
Go to the documentation of this file.
1 // Copyright (c) Space-ng, inc. All rights reserved.
2 #pragma once
3 
4 #include "sol3/asio/strand.h"
5 
6 #include <boost/asio/basic_waitable_timer.hpp>
7 #include <boost/asio/steady_timer.hpp>
8 #include <boost/asio/strand.hpp>
9 
10 #include <chrono>
11 #include <cstdint>
12 
13 namespace sol3::core {
27 template <typename TClockT = std::chrono::steady_clock>
28 typename TClockT::time_point periodicExpiry(
29  typename TClockT::time_point now,
30  typename TClockT::duration period,
31  typename TClockT::duration phase = {});
32 
34  public:
35  virtual ~IAsyncPeriodic() = default;
38  virtual void start(
39  std::function<void(std::chrono::steady_clock::time_point expiry)>
40  handler) = 0;
42  virtual void cancel() = 0;
45  virtual void setPeriod(std::chrono::steady_clock::duration period) = 0;
48  virtual void setPhase(std::chrono::steady_clock::duration phase) = 0;
49 
52  virtual std::chrono::steady_clock::duration period() const = 0;
55  virtual std::chrono::steady_clock::duration phase() const = 0;
58  virtual std::chrono::steady_clock::time_point expiry() const = 0;
59 };
60 
64 template <typename TRep, typename TPeriod>
65 std::shared_ptr<IAsyncPeriodic> createAsyncPeriodic(
66  asio::Strand strand, std::chrono::duration<TRep, TPeriod> period);
67 
68 } // namespace sol3::core
Definition: async_periodic.h:33
virtual std::chrono::steady_clock::duration period() const =0
Gets the current period.
virtual std::chrono::steady_clock::duration phase() const =0
Gets the phase time of the timer.
virtual void setPhase(std::chrono::steady_clock::duration phase)=0
Sets the phase for the timer.
virtual void start(std::function< void(std::chrono::steady_clock::time_point expiry)> handler)=0
Starts the periodic timer with the specified handler.
virtual ~IAsyncPeriodic()=default
virtual std::chrono::steady_clock::time_point expiry() const =0
Gets the expiry time of the timer.
virtual void cancel()=0
Cancels the periodic timer.
virtual void setPeriod(std::chrono::steady_clock::duration period)=0
Sets a new period for the timer.
auto handler(TClass *obj, TCallable &&callable)
Definition: handlers.h:161
boost::asio::strand< boost::asio::io_context::executor_type > Strand
Definition: strand.h:8
Definition: any_message_input.h:15
std::shared_ptr< IAsyncPeriodic > createAsyncPeriodic(asio::Strand strand, std::chrono::duration< TRep, TPeriod > period)
Constructs an IAsyncPeriodic timer.
TClockT::time_point periodicExpiry(typename TClockT::time_point now, typename TClockT::duration period, typename TClockT::duration phase={})
Computes the next expiry time point for a periodic timer.