FMT 1.2.0
Forest management tools for forest planning
Loading...
Searching...
No Matches
FMTTaskHandler.h
Go to the documentation of this file.
1/*
2Copyright (c) 2019 Gouvernement du Québec
3
4SPDX-License-Identifier: LiLiQ-R-1.1
5License-Filename: LICENSES/EN/LiLiQ-R11unicode.txt
6*/
7#ifndef FMTTASKHANDLER_Hm_included
8#define FMTTASKHANDLER_Hm_included
9#include <memory>
10#include "FMTObject.h"
11
12namespace boost
13 {
14 class thread;
15 }
16
18namespace Parallel
19{
20 class FMTTask;
21 // DocString: FMTTaskHandler
27 {
28
29 public:
30 // DocString: FMTTaskHandler::FMTTaskHandler(const std::unique_ptr<FMTTask>&,unsigned int)
36 FMTTaskHandler(const std::unique_ptr<FMTTask>& maintask,
37 unsigned int maxthread = 0);
38 // DocString: ~FMTTaskHandler()
42 ~FMTTaskHandler()=default;
43 // DocString: FMTTaskHandler::FMTTaskHandler(const Parallel::FMTTask&,unsigned int)
49 FMTTaskHandler(const FMTTask& maintask,
50 unsigned int maxthread = 0);
51 // DocString: FMTTaskHandler::FMTTaskHandler()
55 FMTTaskHandler() = default;
56 // DocString: FMTTaskHandler::FMTTaskHandler(const FMTTaskHandler)
62 // DocString: FMTTaskHandler::operator=
68 FMTTaskHandler& operator =(const FMTTaskHandler& rhs);
69 // DocString: FMTTaskHandler::getTasks
74 const std::vector<std::unique_ptr<FMTTask>>& getTasks() const;
75 // DocString: FMTTaskHandler::getTasksFromDynamicCast
81 template<class ptrtype>
82 const std::vector<const ptrtype*> getTasksFromDynamicCast() const
83 {
84 std::vector<const ptrtype*>castedptr;
85 for (const std::unique_ptr<FMTTask>& task : m_alltasks)
86 {
87 castedptr.push_back(dynamic_cast<const ptrtype*>(task.get()));
88 }
89 return castedptr;
90 }
91 // DocString: FMTTaskHandler::conccurentRun
96 // DocString: FMTTaskHandler::onDemandRun
101 // DocString: FMTTaskHandler::passInLogger
106 void passInLogger(const std::unique_ptr<Logging::FMTLogger>& logger) override;
107 private:
108 // DocString: FMTTaskHandler::m_maxnumberofthread
110 unsigned int m_maxnumberofthread;
111 // DocString: FMTTaskHandler::m_alltasks
113 std::vector<std::unique_ptr<FMTTask>>m_alltasks;
114 // DocString: FMTTaskHandler::_splitTasks
118 void _splitTasks();
119 // DocString: FMTTaskHandler::_finalize
124 void _finalize(std::unique_ptr<FMTTask>& lasttask);
125 // DocString: FMTTaskHandler::_logTaskTime
130 void _logTaskTime(const std::chrono::time_point<std::chrono::high_resolution_clock>& startime) const;
131 // DocString: FMTTaskHandler::_interruptWork
136 static void _interruptWork(boost::thread& p_thread);
137 // DocString: FMTTaskHandler::_setMaximumNumberOfThreads
143 void _setMaximumNumberOfThreads(const FMTTask& p_MainTask,
144 unsigned int p_UserDecision);
145
146 };
147
148}
149
150#endif
#define FMTEXPORT
Definition: FMTutility.h:125
Base class of multiple FMT classes holding a shared exception handler pointer and logger.
Definition: FMTObject.h:49
Main class for running concurrent tasks at the same time.
Definition: FMTTaskHandler.h:27
~FMTTaskHandler()=default
Default destructor for FMTTaskHandler.
void conccurentRun()
Use the split task virtual function to generate all the tasks and run them at the same time.
void passInLogger(const std::unique_ptr< Logging::FMTLogger > &logger) override
Pass in the logger, overridden for the OsiSolverInterface.
FMTTaskHandler(const std::unique_ptr< FMTTask > &maintask, unsigned int maxthread=0)
Construct the handler from a main task and a number of threads.
FMTTaskHandler(const FMTTask &maintask, unsigned int maxthread=0)
Constructor for Python and R taking a FMTTask by reference.
const std::vector< const ptrtype * > getTasksFromDynamicCast() const
Return the tasks dynamically cast to the requested pointer type.
Definition: FMTTaskHandler.h:82
FMTTaskHandler(const FMTTaskHandler &rhs)
Default copy constructor for FMTTaskHandler.
const std::vector< std::unique_ptr< FMTTask > > & getTasks() const
Return a reference to the tasks handled by the task handler.
void onDemandRun()
Use the spawn task virtual function to generate tasks from the master task and add them to a list,...
FMTTaskHandler()=default
Default constructor for FMTTaskHandler.
Task for parallel jobs.
Definition: FMTTask.h:27
Namespace for parallel tasking may include multithreading / multiprocessing.
Definition: FMTOpAreaSchedulerTask.h:40
Definition: FMTAction.h:463