87 template<
typename Derived,
typename Input,
typename Result>
127 throw std::runtime_error(
"AsyncJob: cannot get write-access to the input while an async job is running. Please "
128 "ensure that running() is false before modifying the input in place");
135 auto start_async = mc_rtc::clock::now();
139 auto start_compute = mc_rtc::clock::now();
140 auto result =
derived().computeJob();
173 auto start_check = mc_rtc::clock::now();
182 catch(
const std::exception & e)
251 std::string
name()
const {
return "AsyncJob"; }
290 Derived &
derived() {
return static_cast<Derived &
>(*this); }
307 template<
typename Derived,
typename Input,
typename Result>
auto Input(const std::string &name, T &value)
Definition: Input.h:18
void error(Args &&... args)
Definition: logging.h:90
Definition: AsyncJob.h:13
double elapsed_ms_count(std::chrono::time_point< mc_rtc::clock > start)
Definition: clock.h:50
Logs controller data to disk.
Definition: Logger.h:30
void removeLogEntries(const void *source)
void addLogEntry(const std::string &name, const SourceT *source, CallbackT &&get_fn, bool overwrite=false)
Definition: Logger.h:208
Definition: StateBuilder.h:28
void removeElements(void *source)
Definition: AsyncJob.h:91
double dt_startAsync
Definition: AsyncJob.h:92
std::atomic< double > dt_compute
Definition: AsyncJob.h:99
double dt_loggerImpl
Definition: AsyncJob.h:94
double dt_guiImpl
Definition: AsyncJob.h:95
double dt_checkResult
Definition: AsyncJob.h:93
Helper base class for asynchronous jobs using CRTP.
Definition: AsyncJob.h:89
Timers timers_
Definition: AsyncJob.h:264
bool startedOnce_
Definition: AsyncJob.h:257
bool inLogger_
Definition: AsyncJob.h:255
mc_rtc::Logger * logger_
Definition: AsyncJob.h:284
std::atomic< bool > running_
Definition: AsyncJob.h:254
bool inGUI_
Definition: AsyncJob.h:256
void addToGUIImpl()
Definition: AsyncJob.h:281
std::future< Result > futureResult_
Definition: AsyncJob.h:259
void addToGUI_()
Definition: AsyncJob.h:303
AsyncJob & operator=(const AsyncJob &)=delete
AsyncJob(const AsyncJob &)=delete
Derived & derived()
Definition: AsyncJob.h:290
bool startedOnce() const noexcept
Definition: AsyncJob.h:155
std::vector< std::string > guiCategory_
Definition: AsyncJob.h:287
bool checkResult()
Check if the asynchronous job has completed and handle bookkeeping.
Definition: AsyncJob.h:170
std::string name() const
Definition: AsyncJob.h:251
void addToLogger_()
Definition: AsyncJob.h:292
AsyncJob & operator=(AsyncJob &&)=delete
void addToLogger(mc_rtc::Logger &logger, const std::string &prefix)
Definition: AsyncJob.h:219
void addToLoggerImpl()
Definition: AsyncJob.h:280
const std::optional< Result > & lastResult() const noexcept
Definition: AsyncJob.h:217
bool running() const noexcept
Definition: AsyncJob.h:150
void removeFromGUI()
Definition: AsyncJob.h:242
void startAsync()
Definition: AsyncJob.h:133
void addToGUI(mc_rtc::gui::StateBuilder &gui, const std::vector< std::string > &category)
Definition: AsyncJob.h:226
~AsyncJob()
Definition: AsyncJob.h:108
std::string loggerPrefix_
Definition: AsyncJob.h:285
Input & input()
Access the input data for the job.
Definition: AsyncJob.h:123
std::optional< Result > lastResult_
Definition: AsyncJob.h:263
Input input_
Input data for the asynchronous job.
Definition: AsyncJob.h:274
mc_rtc::gui::StateBuilder * gui_
Definition: AsyncJob.h:286
AsyncJob(AsyncJob &&)=delete
bool canGetSharedState_
Definition: AsyncJob.h:261
void removeFromLogger()
Definition: AsyncJob.h:233